diff --git a/app/kits/models/kit_like.ts b/app/kits/models/kit_like.ts index 265815c..62af54e 100644 --- a/app/kits/models/kit_like.ts +++ b/app/kits/models/kit_like.ts @@ -9,4 +9,15 @@ export default class KitLike extends KitLikeSchema { @belongsTo(() => Kit) declare kit: BelongsTo + + static async resolveViewerLikedKitIds( + viewerDid: string | undefined, + kitIds: number[] + ): Promise> { + if (!viewerDid || kitIds.length === 0) { + return new Set() + } + const likes = await KitLike.query().where('did', viewerDid).whereIn('kit_id', kitIds) + return new Set(likes.map((l) => l.kitId)) + } } diff --git a/app/kits/transformers/kit_record_transformer.ts b/app/kits/transformers/kit_record_transformer.ts index 7699995..2e83973 100644 --- a/app/kits/transformers/kit_record_transformer.ts +++ b/app/kits/transformers/kit_record_transformer.ts @@ -1,16 +1,16 @@ import { BaseTransformer } from '@adonisjs/core/transformers' -import type { Main } from '#lexicons/build/gunpla/kit.defs' +import type { Main as KitRecordValue } from '#lexicons/build/gunpla/kit.defs' import { AtUri } from '@atproto/syntax' import { getBlobCidString, isBlobRef } from '@atproto/lex' import { getBlobUrl } from '#kits/helpers/atproto' -export interface PhotoItem { +export type PhotoItem = { cid: string thumbUrl: string fullUrl: string } -type KitRecord = { uri: string; value: Main } +type KitRecord = { uri: string; value: KitRecordValue } export default class KitRecordTransformer extends BaseTransformer { toObject() { @@ -23,8 +23,8 @@ export default class KitRecordTransformer extends BaseTransformer { if (Array.isArray(rawPhotos)) { for (const p of rawPhotos) { if (isBlobRef(p)) { - const cid = getBlobCidString(p) - if (cid) photoCidList.push(cid) + const cidStr = getBlobCidString(p) + if (cidStr) photoCidList.push(cidStr) } } } diff --git a/app/kits/transformers/kit_transformer.ts b/app/kits/transformers/kit_transformer.ts index cd90aec..7efb8d1 100644 --- a/app/kits/transformers/kit_transformer.ts +++ b/app/kits/transformers/kit_transformer.ts @@ -4,7 +4,7 @@ import { getBlobUrl } from '#kits/helpers/atproto' import { AtUri } from '@atproto/syntax' import ProfileTransformer from '#profile/transformers/profile_transformer' -export interface PhotoItem { +export type PhotoItem = { cid: string thumbUrl: string fullUrl: string diff --git a/app/kits/validators/kit.ts b/app/kits/validators/kit.ts index 66f79cd..9beaddd 100644 --- a/app/kits/validators/kit.ts +++ b/app/kits/validators/kit.ts @@ -1,4 +1,5 @@ import vine from '@vinejs/vine' +import type { Infer } from '@vinejs/vine/types' import { isValidRecordKey } from '@atproto/syntax' export const recordKeyRule = vine.createRule((value, _, field) => { @@ -84,3 +85,10 @@ export const updateKitValidator = vine.create({ existingPhotos: vine.array(vine.string()).maxLength(20).optional(), photosSubmitted: vine.boolean().optional(), }) + +export type CreateKitPayload = Infer +export type UpdateKitPayload = Infer +export type KitParams = Infer +export type LikeKitParams = Infer +export type SyncIdentifierPayload = Infer +export type ListKitsQuery = Infer