diff --git a/packages/server/src/entities/res/res.ts b/packages/server/src/entities/res/res.ts index 3977f64..d513455 100644 --- a/packages/server/src/entities/res/res.ts +++ b/packages/server/src/entities/res/res.ts @@ -41,41 +41,45 @@ export type IResAPI = | IResForkAPI | IResDeleteAPI; -export interface IResBaseAPI { - readonly id: string; - readonly topicID: string; - readonly date: Date; - readonly self: boolean | null; - readonly uv: number; - readonly dv: number; - readonly hash: string; - readonly replyCount: number; - readonly voteFlag: VoteFlag | null; - readonly type: T; +// -- +// typescript-resolver-files がinterfaceのextendsをサポートしていないので、classとして定義するがinterfaceとして使う +export class IResBaseAPI { + readonly id!: string; + readonly topicID!: string; + readonly date!: Date; + readonly self!: boolean | null; + readonly uv!: number; + readonly dv!: number; + readonly hash!: string; + readonly replyCount!: number; + readonly voteFlag!: VoteFlag | null; + readonly type!: T; } -export interface IResNormalAPI extends IResBaseAPI<"normal"> { - readonly name: string | null; - readonly text: string; - readonly replyID: string | null; - readonly profileID: string | null; - readonly isReply: boolean | null; +export class IResNormalAPI extends IResBaseAPI<"normal"> { + readonly name!: string | null; + readonly text!: string; + readonly replyID!: string | null; + readonly profileID!: string | null; + readonly isReply!: boolean | null; } -export interface IResHistoryAPI extends IResBaseAPI<"history"> { - readonly historyID: string; +export class IResHistoryAPI extends IResBaseAPI<"history"> { + readonly historyID!: string; } -export type IResTopicAPI = IResBaseAPI<"topic">; +export class IResTopicAPI extends IResBaseAPI<"topic"> {} -export interface IResForkAPI extends IResBaseAPI<"fork"> { - readonly forkID: string; +export class IResForkAPI extends IResBaseAPI<"fork"> { + readonly forkID!: string; } -export interface IResDeleteAPI extends IResBaseAPI<"delete"> { - readonly flag: "self" | "freeze"; +export class IResDeleteAPI extends IResBaseAPI<"delete"> { + readonly flag!: "self" | "freeze"; } +// -- + export type VoteFlag = "uv" | "dv" | "not"; export type ResDeleteFlag = "active" | "self" | "freeze"; export interface IReply { diff --git a/packages/server/src/entities/token/token.ts b/packages/server/src/entities/token/token.ts index 3309582..661831e 100644 --- a/packages/server/src/entities/token/token.ts +++ b/packages/server/src/entities/token/token.ts @@ -13,27 +13,30 @@ export interface ITokenReq { readonly active: boolean; } -export interface ITokenReqAPI { - readonly token: string; - readonly key: string; +export class ITokenReqAPI { + readonly token!: string; + readonly key!: string; } export type TokenType = "master" | "general"; export type ITokenAPI = ITokenGeneralAPI | ITokenMasterAPI; -export interface ITokenBaseAPI { - readonly id: string; - readonly key: string; - readonly date: string; - readonly type: T; +// -- +// typescript-resolver-files がinterfaceのextendsをサポートしていないので、classとして定義するがinterfaceとして使う +export class ITokenBaseAPI { + readonly id!: string; + readonly key!: string; + readonly date!: string; + readonly type!: T; } -export type ITokenMasterAPI = ITokenBaseAPI<"master">; +export class ITokenMasterAPI extends ITokenBaseAPI<"master"> {} -export interface ITokenGeneralAPI extends ITokenBaseAPI<"general"> { - readonly clientID: string; +export class ITokenGeneralAPI extends ITokenBaseAPI<"general"> { + readonly clientID!: string; } +// -- export type Token = TokenMaster | TokenGeneral; diff --git a/packages/server/src/entities/topic/topic.ts b/packages/server/src/entities/topic/topic.ts index da73a94..b65ec2c 100644 --- a/packages/server/src/entities/topic/topic.ts +++ b/packages/server/src/entities/topic/topic.ts @@ -18,29 +18,33 @@ export interface ITagsAPI { export type ITopicAPI = ITopicOneAPI | ITopicNormalAPI | ITopicForkAPI; export type ITopicSearchAPI = ITopicOneAPI | ITopicNormalAPI; -export interface ITopicBaseAPI { - readonly id: string; - readonly title: string; - readonly update: string; - readonly date: string; - readonly resCount: number; - readonly type: T; - readonly active: boolean; +// -- +// typescript-resolver-files がinterfaceのextendsをサポートしていないので、classとして定義するがinterfaceとして使う +export class ITopicBaseAPI { + readonly id!: string; + readonly title!: string; + readonly update!: string; + readonly date!: string; + readonly resCount!: number; + readonly type!: T; + readonly active!: boolean; } -export interface ITopicSearchBaseAPI - extends ITopicBaseAPI { - readonly tags: Array; - readonly text: string; +export class ITopicSearchBaseAPI< + T extends TopicSearchType +> extends ITopicBaseAPI { + readonly tags!: Array; + readonly text!: string; } -export type ITopicNormalAPI = ITopicSearchBaseAPI<"normal">; +export class ITopicNormalAPI extends ITopicSearchBaseAPI<"normal"> {} -export type ITopicOneAPI = ITopicSearchBaseAPI<"one">; +export class ITopicOneAPI extends ITopicSearchBaseAPI<"one"> {} -export interface ITopicForkAPI extends ITopicBaseAPI<"fork"> { - readonly parentID: string; +export class ITopicForkAPI extends ITopicBaseAPI<"fork"> { + readonly parentID!: string; } +// -- export type TopicSearchType = "one" | "normal"; export type TopicType = TopicSearchType | "fork"; diff --git a/packages/server/src/schema/res/resolvers/ResDelete.ts b/packages/server/src/schema/res/resolvers/ResDelete.ts index 336dac0..ba72923 100644 --- a/packages/server/src/schema/res/resolvers/ResDelete.ts +++ b/packages/server/src/schema/res/resolvers/ResDelete.ts @@ -1,6 +1,6 @@ import type { ResDeleteResolvers } from "./../../types.generated"; -import { ResBase } from "./ResBase"; +import { base_Res } from "./base_Res"; export const ResDelete: ResDeleteResolvers = { - ...ResBase, + topic: base_Res.topic, }; diff --git a/packages/server/src/schema/res/resolvers/ResFork.ts b/packages/server/src/schema/res/resolvers/ResFork.ts index 7c2df03..cf9ddf7 100644 --- a/packages/server/src/schema/res/resolvers/ResFork.ts +++ b/packages/server/src/schema/res/resolvers/ResFork.ts @@ -1,9 +1,9 @@ import { getTopic } from "../../../usecases"; import type { ResForkResolvers } from "./../../types.generated"; -import { ResBase } from "./ResBase"; +import { base_Res } from "./base_Res"; export const ResFork: ResForkResolvers = { - ...ResBase, + topic: base_Res.topic, fork: async (res, _args, context, _info) => { const fork = await getTopic({ id: res.forkID }, context.ports); if (fork.type !== "fork") { diff --git a/packages/server/src/schema/res/resolvers/ResHistory.ts b/packages/server/src/schema/res/resolvers/ResHistory.ts index f6e9a33..39fcaf9 100644 --- a/packages/server/src/schema/res/resolvers/ResHistory.ts +++ b/packages/server/src/schema/res/resolvers/ResHistory.ts @@ -1,9 +1,9 @@ import { getHistory } from "../../../usecases"; import type { ResHistoryResolvers } from "./../../types.generated"; -import { ResBase } from "./ResBase"; +import { base_Res } from "./base_Res"; export const ResHistory: ResHistoryResolvers = { - ...ResBase, + topic: base_Res.topic, history: async (res, _args, context, _info) => { const history = await getHistory({ id: res.historyID }, context.ports); return history; diff --git a/packages/server/src/schema/res/resolvers/ResNormal.ts b/packages/server/src/schema/res/resolvers/ResNormal.ts index 2ba862c..c2453e6 100644 --- a/packages/server/src/schema/res/resolvers/ResNormal.ts +++ b/packages/server/src/schema/res/resolvers/ResNormal.ts @@ -1,9 +1,9 @@ import { getProfile, getRes } from "../../../usecases"; import type { ResNormalResolvers } from "./../../types.generated"; -import { ResBase } from "./ResBase"; +import { base_Res } from "./base_Res"; export const ResNormal: ResNormalResolvers = { - ...ResBase, + topic: base_Res.topic, reply: async (res, _args, context, _info) => { if (res.replyID !== null) { const reply = await getRes({ id: res.replyID }, context.ports); diff --git a/packages/server/src/schema/res/resolvers/ResSubscript.ts b/packages/server/src/schema/res/resolvers/ResSubscript.ts index 585bf2c..e9858a2 100644 --- a/packages/server/src/schema/res/resolvers/ResSubscript.ts +++ b/packages/server/src/schema/res/resolvers/ResSubscript.ts @@ -1,8 +1,8 @@ -import type { ResSubscriptResolvers } from './../../types.generated'; - export const ResSubscript: ResSubscriptResolvers = { - /* Implement ResSubscript resolver logic here */ - res: ({ res }) => { - /* ResSubscript.res resolver is required because ResSubscript.res and ResSubscriptMapper.res are not compatible */ - return res - } - }; \ No newline at end of file +import type { ResSubscriptResolvers } from "./../../types.generated"; +export const ResSubscript: ResSubscriptResolvers = { + /* Implement ResSubscript resolver logic here */ + res: ({ res }) => { + /* ResSubscript.res resolver is required because ResSubscript.res and ResSubscriptMapper.res are not compatible */ + return res; + }, +}; diff --git a/packages/server/src/schema/res/resolvers/ResTopic.ts b/packages/server/src/schema/res/resolvers/ResTopic.ts index be488ea..40d7e04 100644 --- a/packages/server/src/schema/res/resolvers/ResTopic.ts +++ b/packages/server/src/schema/res/resolvers/ResTopic.ts @@ -1,6 +1,6 @@ import type { ResTopicResolvers } from "./../../types.generated"; -import { ResBase } from "./ResBase"; +import { base_Res } from "./base_Res"; export const ResTopic: ResTopicResolvers = { - ...ResBase, + topic: base_Res.topic, }; diff --git a/packages/server/src/schema/res/resolvers/ResBase.ts b/packages/server/src/schema/res/resolvers/base_Res.ts similarity index 79% rename from packages/server/src/schema/res/resolvers/ResBase.ts rename to packages/server/src/schema/res/resolvers/base_Res.ts index 3430b77..27f5248 100644 --- a/packages/server/src/schema/res/resolvers/ResBase.ts +++ b/packages/server/src/schema/res/resolvers/base_Res.ts @@ -1,7 +1,7 @@ import { getTopic } from "../../../usecases"; import type { ResResolvers } from "./../../types.generated"; -export const ResBase: Omit = { +export const base_Res: Required> = { topic: async (res, _args, context, _info) => { const topic = await getTopic({ id: res.topicID }, context.ports); return topic; diff --git a/packages/server/src/schema/storage/resolvers/SetStoragesPayload.ts b/packages/server/src/schema/storage/resolvers/SetStoragesPayload.ts index b680e60..69d53cd 100644 --- a/packages/server/src/schema/storage/resolvers/SetStoragesPayload.ts +++ b/packages/server/src/schema/storage/resolvers/SetStoragesPayload.ts @@ -1,4 +1,4 @@ -import type { SetStoragesPayloadResolvers } from './../../types.generated'; - export const SetStoragesPayload: SetStoragesPayloadResolvers = { - /* Implement SetStoragesPayload resolver logic here */ - }; \ No newline at end of file +import type { SetStoragesPayloadResolvers } from "./../../types.generated"; +export const SetStoragesPayload: SetStoragesPayloadResolvers = { + /* Implement SetStoragesPayload resolver logic here */ +}; diff --git a/packages/server/src/schema/storage/resolvers/Storage.ts b/packages/server/src/schema/storage/resolvers/Storage.ts index 7951510..c493df7 100644 --- a/packages/server/src/schema/storage/resolvers/Storage.ts +++ b/packages/server/src/schema/storage/resolvers/Storage.ts @@ -1,4 +1,4 @@ -import type { StorageResolvers } from './../../types.generated'; - export const Storage: StorageResolvers = { - /* Implement Storage resolver logic here */ - }; \ No newline at end of file +import type { StorageResolvers } from "./../../types.generated"; +export const Storage: StorageResolvers = { + /* Implement Storage resolver logic here */ +}; diff --git a/packages/server/src/schema/token/resolvers/CreateTokenGeneralResponse.ts b/packages/server/src/schema/token/resolvers/CreateTokenGeneralResponse.ts index fcab606..553bb07 100644 --- a/packages/server/src/schema/token/resolvers/CreateTokenGeneralResponse.ts +++ b/packages/server/src/schema/token/resolvers/CreateTokenGeneralResponse.ts @@ -1,4 +1,3 @@ import type { CreateTokenGeneralResponseResolvers } from "./../../types.generated"; export const CreateTokenGeneralResponse: CreateTokenGeneralResponseResolvers = - { -}; + {}; diff --git a/packages/server/src/schema/token/resolvers/Mutation/authTokenReq.ts b/packages/server/src/schema/token/resolvers/Mutation/authTokenReq.ts index d1b8c0b..2ce530b 100644 --- a/packages/server/src/schema/token/resolvers/Mutation/authTokenReq.ts +++ b/packages/server/src/schema/token/resolvers/Mutation/authTokenReq.ts @@ -1,7 +1,9 @@ import { AtNotFoundError } from "../../../../at-error"; import type { MutationResolvers } from "./../../../types.generated"; -export const authTokenReq: NonNullable = async (_obj, args, context, _info) => { +export const authTokenReq: NonNullable< + MutationResolvers["authTokenReq"] +> = async (_obj, args, context, _info) => { const token = await context.ports.tokenRepo.findOne(args.id); if (token.type !== "general") { throw new AtNotFoundError("トークンが見つかりません"); diff --git a/packages/server/src/schema/token/resolvers/Query/token.ts b/packages/server/src/schema/token/resolvers/Query/token.ts index c30ce90..5c25ca1 100644 --- a/packages/server/src/schema/token/resolvers/Query/token.ts +++ b/packages/server/src/schema/token/resolvers/Query/token.ts @@ -1,5 +1,5 @@ import type { QueryResolvers } from "./../../../types.generated"; -export const token: NonNullable = async ( +export const token: NonNullable = async ( _obj, _args, context, diff --git a/packages/server/src/schema/token/resolvers/Query/tokens.ts b/packages/server/src/schema/token/resolvers/Query/tokens.ts index a9571cf..892c708 100644 --- a/packages/server/src/schema/token/resolvers/Query/tokens.ts +++ b/packages/server/src/schema/token/resolvers/Query/tokens.ts @@ -1,5 +1,5 @@ import type { QueryResolvers } from "./../../../types.generated"; -export const tokens: NonNullable = async ( +export const tokens: NonNullable = async ( _obj, _args, context, diff --git a/packages/server/src/schema/token/resolvers/TokenMaster.ts b/packages/server/src/schema/token/resolvers/TokenMaster.ts index bd32e8f..c4991d6 100644 --- a/packages/server/src/schema/token/resolvers/TokenMaster.ts +++ b/packages/server/src/schema/token/resolvers/TokenMaster.ts @@ -1,3 +1,2 @@ import type { TokenMasterResolvers } from "./../../types.generated"; -export const TokenMaster: TokenMasterResolvers = { -}; +export const TokenMaster: TokenMasterResolvers = {}; diff --git a/packages/server/src/schema/token/resolvers/TokenReq.ts b/packages/server/src/schema/token/resolvers/TokenReq.ts index 2370c55..3c12da7 100644 --- a/packages/server/src/schema/token/resolvers/TokenReq.ts +++ b/packages/server/src/schema/token/resolvers/TokenReq.ts @@ -1,3 +1,2 @@ import type { TokenReqResolvers } from "./../../types.generated"; -export const TokenReq: TokenReqResolvers = { -}; +export const TokenReq: TokenReqResolvers = {}; diff --git a/packages/server/src/schema/topic/resolvers/Tags.ts b/packages/server/src/schema/topic/resolvers/Tags.ts index eec1dd7..28a767f 100644 --- a/packages/server/src/schema/topic/resolvers/Tags.ts +++ b/packages/server/src/schema/topic/resolvers/Tags.ts @@ -1,4 +1,4 @@ -import type { TagsResolvers } from './../../types.generated'; - export const Tags: TagsResolvers = { - /* Implement Tags resolver logic here */ - }; \ No newline at end of file +import type { TagsResolvers } from "./../../types.generated"; +export const Tags: TagsResolvers = { + /* Implement Tags resolver logic here */ +}; diff --git a/packages/server/src/schema/topic/resolvers/TopicFork.ts b/packages/server/src/schema/topic/resolvers/TopicFork.ts index c5d887a..03cd38e 100644 --- a/packages/server/src/schema/topic/resolvers/TopicFork.ts +++ b/packages/server/src/schema/topic/resolvers/TopicFork.ts @@ -1,9 +1,9 @@ import { getTopic } from "../../../usecases"; import type { TopicForkResolvers } from "./../../types.generated"; -import { TopicBase } from "./TopicBase"; +import { base_Topic } from "./base_Topic"; export const TopicFork: TopicForkResolvers = { - ...TopicBase, + subscribe: base_Topic.subscribe, parent: async (token, _args, context, _info) => { const parent = await getTopic({ id: token.parentID }, context.ports); if (parent.type !== "normal") { diff --git a/packages/server/src/schema/topic/resolvers/TopicNormal.ts b/packages/server/src/schema/topic/resolvers/TopicNormal.ts index effd473..55d3853 100644 --- a/packages/server/src/schema/topic/resolvers/TopicNormal.ts +++ b/packages/server/src/schema/topic/resolvers/TopicNormal.ts @@ -1,6 +1,6 @@ import type { TopicNormalResolvers } from "./../../types.generated"; -import { TopicSearchBase } from "./TopicSearchBase"; +import { base_Topic } from "./base_Topic"; export const TopicNormal: TopicNormalResolvers = { - ...TopicSearchBase, + subscribe: base_Topic.subscribe, }; diff --git a/packages/server/src/schema/topic/resolvers/TopicOne.ts b/packages/server/src/schema/topic/resolvers/TopicOne.ts index fb24373..78cb204 100644 --- a/packages/server/src/schema/topic/resolvers/TopicOne.ts +++ b/packages/server/src/schema/topic/resolvers/TopicOne.ts @@ -1,6 +1,6 @@ import type { TopicOneResolvers } from "./../../types.generated"; -import { TopicSearchBase } from "./TopicSearchBase"; +import { base_Topic } from "./base_Topic"; export const TopicOne: TopicOneResolvers = { - ...TopicSearchBase, + subscribe: base_Topic.subscribe, }; diff --git a/packages/server/src/schema/topic/resolvers/TopicSearchBase.ts b/packages/server/src/schema/topic/resolvers/TopicSearchBase.ts deleted file mode 100644 index 5a8843b..0000000 --- a/packages/server/src/schema/topic/resolvers/TopicSearchBase.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { TopicSearchResolvers } from "./../../types.generated"; -import { TopicBase } from "./TopicBase"; - -export const TopicSearchBase: Omit = { - ...TopicBase, -}; diff --git a/packages/server/src/schema/topic/resolvers/TopicBase.ts b/packages/server/src/schema/topic/resolvers/base_Topic.ts similarity index 84% rename from packages/server/src/schema/topic/resolvers/TopicBase.ts rename to packages/server/src/schema/topic/resolvers/base_Topic.ts index ef0468f..4539692 100644 --- a/packages/server/src/schema/topic/resolvers/TopicBase.ts +++ b/packages/server/src/schema/topic/resolvers/base_Topic.ts @@ -1,7 +1,7 @@ import type { TopicResolvers } from "./../../types.generated"; import * as O from "fp-ts/lib/Option"; -export const TopicBase: Omit = { +export const base_Topic: Required> = { subscribe: async (topic, _args, context, _info) => { // TODO: N+1 const token = context.ports.authContainer.getTokenOrNull(); diff --git a/packages/server/src/schema/user/resolvers/CreateUserResponse.ts b/packages/server/src/schema/user/resolvers/CreateUserResponse.ts index 669116e..c299d35 100644 --- a/packages/server/src/schema/user/resolvers/CreateUserResponse.ts +++ b/packages/server/src/schema/user/resolvers/CreateUserResponse.ts @@ -1,4 +1,4 @@ -import type { CreateUserResponseResolvers } from './../../types.generated'; - export const CreateUserResponse: CreateUserResponseResolvers = { - /* Implement CreateUserResponse resolver logic here */ - }; \ No newline at end of file +import type { CreateUserResponseResolvers } from "./../../types.generated"; +export const CreateUserResponse: CreateUserResponseResolvers = { + /* Implement CreateUserResponse resolver logic here */ +}; diff --git a/packages/server/src/schema/user/resolvers/UpdateUserResponse.ts b/packages/server/src/schema/user/resolvers/UpdateUserResponse.ts index d0644e5..5c505d0 100644 --- a/packages/server/src/schema/user/resolvers/UpdateUserResponse.ts +++ b/packages/server/src/schema/user/resolvers/UpdateUserResponse.ts @@ -1,4 +1,4 @@ -import type { UpdateUserResponseResolvers } from './../../types.generated'; - export const UpdateUserResponse: UpdateUserResponseResolvers = { - /* Implement UpdateUserResponse resolver logic here */ - }; \ No newline at end of file +import type { UpdateUserResponseResolvers } from "./../../types.generated"; +export const UpdateUserResponse: UpdateUserResponseResolvers = { + /* Implement UpdateUserResponse resolver logic here */ +}; diff --git a/packages/server/src/schema/user/resolvers/User.ts b/packages/server/src/schema/user/resolvers/User.ts index 56ad1ab..7eac6d5 100644 --- a/packages/server/src/schema/user/resolvers/User.ts +++ b/packages/server/src/schema/user/resolvers/User.ts @@ -1,4 +1,4 @@ -import type { UserResolvers } from './../../types.generated'; - export const User: UserResolvers = { - /* Implement User resolver logic here */ - }; \ No newline at end of file +import type { UserResolvers } from "./../../types.generated"; +export const User: UserResolvers = { + /* Implement User resolver logic here */ +};