feat: add shared @sexy.pivoine.art/types package and fix type safety across frontend/backend
- Create packages/types with shared TypeScript domain model interfaces (User, Video, Model, Article, Comment, Recording, etc.) - Wire both frontend and backend packages to use @sexy.pivoine.art/types via workspace:* - Update backend Pothos objectRef types to use shared interfaces instead of inline types - Update frontend $lib/types.ts to re-export from shared package - Fix all type errors introduced by more accurate nullable types (avatar/banner as string|null UUIDs, author nullable, events/device_info as object[]) - Add artist_name to comment user select in backend resolver - Widen utility function signatures (getAssetUrl, getUserInitials, calcReadingTime) to accept null/undefined Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -377,7 +377,7 @@
|
||||
<div class="flex gap-3 mb-6">
|
||||
<Avatar class="h-8 w-8 ring-2 ring-accent/20 transition-all duration-200">
|
||||
<AvatarImage
|
||||
src={getAssetUrl(data.authStatus.user!.avatar.id, "mini")}
|
||||
src={getAssetUrl(data.authStatus.user!.avatar, "mini")}
|
||||
alt={data.authStatus.user!.artist_name}
|
||||
/>
|
||||
<AvatarFallback
|
||||
@@ -432,27 +432,27 @@
|
||||
<div class="space-y-4">
|
||||
{#each data.comments as comment (comment.id)}
|
||||
<div class="flex gap-3">
|
||||
<a href="/users/{comment.user_created.id}" class="flex-shrink-0">
|
||||
<a href="/users/{comment.user?.id}" class="flex-shrink-0">
|
||||
<Avatar
|
||||
class="h-8 w-8 ring-2 ring-accent/20 hover:ring-primary/40 transition-all duration-200 cursor-pointer"
|
||||
>
|
||||
<AvatarImage
|
||||
src={getAssetUrl(comment.user_created.avatar as string, "mini")}
|
||||
alt={comment.user_created.artist_name}
|
||||
src={getAssetUrl(comment.user?.avatar, "mini")}
|
||||
alt={comment.user?.artist_name}
|
||||
/>
|
||||
<AvatarFallback
|
||||
class="bg-gradient-to-br from-primary to-accent text-primary-foreground text-xs font-semibold transition-all duration-200"
|
||||
>
|
||||
{getUserInitials(comment.user_created.artist_name)}
|
||||
{getUserInitials(comment.user?.artist_name)}
|
||||
</AvatarFallback>
|
||||
</Avatar>
|
||||
</a>
|
||||
<div class="flex-1">
|
||||
<div class="flex items-center gap-2 mb-1">
|
||||
<a
|
||||
href="/users/{comment.user_created.id}"
|
||||
href="/users/{comment.user?.id}"
|
||||
class="font-medium text-sm hover:text-primary transition-colors"
|
||||
>{comment.user_created.artist_name}</a
|
||||
>{comment.user?.artist_name}</a
|
||||
>
|
||||
<span class="text-xs text-muted-foreground"
|
||||
>{timeAgo.format(new Date(comment.date_created))}</span
|
||||
|
||||
Reference in New Issue
Block a user