Skip to content

Commit 6deb9fd

Browse files
카카오 알림톡 템플릿 관련 스키마를 수정하여 content 필드를 string | null로 변경하고, highlightitem 필드를 null 허용으로 수정함. 새로운 variables 필드를 추가하고, 날짜 필드의 스키마를 개선하여 다양한 날짜 형식을 지원하도록 변경함. 또한, 카카오 알림톡 템플릿 응답 스키마를 업데이트하고, 메시지 서비스의 E2E 테스트를 추가하여 다양한 메시지 전송 유형을 검증함.
1 parent e3d56e7 commit 6deb9fd

5 files changed

Lines changed: 684 additions & 22 deletions

File tree

src/models/base/kakao/kakaoAlimtalkTemplate.ts

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@ export const kakaoAlimtalkTemplateStatusSchema = Schema.Literal(
8181
export type KakaoAlimtalkTemplateCommentType = {
8282
isAdmin: boolean;
8383
memberId: string;
84-
content: string;
84+
content: string | null;
8585
dateCreated: string;
8686
};
8787

8888
export const kakaoAlimtalkTemplateCommentTypeSchema = Schema.Struct({
8989
isAdmin: Schema.Boolean,
9090
memberId: Schema.String,
91-
content: Schema.String,
91+
content: Schema.NullOr(Schema.String),
9292
dateCreated: Schema.String,
9393
});
9494

@@ -152,13 +152,26 @@ export const kakaoAlimtalkTemplateSchema = Schema.Struct({
152152
Schema.Array(kakaoAlimtalkTemplateQuickReplySchema),
153153
),
154154
header: Schema.optional(Schema.NullOr(Schema.String)),
155-
highlight: Schema.optional(kakaoAlimtalkTemplateHighlightTypeSchema),
156-
item: Schema.optional(kakaoAlimtalkTemplateItemTypeSchema),
155+
highlight: Schema.optional(
156+
Schema.NullOr(kakaoAlimtalkTemplateHighlightTypeSchema),
157+
),
158+
item: Schema.optional(Schema.NullOr(kakaoAlimtalkTemplateItemTypeSchema)),
157159
templateId: Schema.String,
158160
code: Schema.optional(Schema.String),
159161
status: kakaoAlimtalkTemplateStatusSchema,
160-
dateCreated: Schema.optional(Schema.Date),
161-
dateUpdated: Schema.optional(Schema.Date),
162+
variables: Schema.optional(
163+
Schema.Array(
164+
Schema.Struct({
165+
name: Schema.String,
166+
}),
167+
),
168+
),
169+
dateCreated: Schema.optional(
170+
Schema.Union(Schema.DateFromString, Schema.Date, Schema.DateFromSelf),
171+
),
172+
dateUpdated: Schema.optional(
173+
Schema.Union(Schema.DateFromString, Schema.Date, Schema.DateFromSelf),
174+
),
162175
});
163176

164177
export type KakaoAlimtalkTemplateSchema = Schema.Schema.Type<
@@ -264,12 +277,12 @@ export interface KakaoAlimtalkTemplateInterface {
264277
/**
265278
* @description 아이템 리스트용 하이라이트 정보 유형
266279
*/
267-
highlight?: KakaoAlimtalkTemplateHighlightType;
280+
highlight?: KakaoAlimtalkTemplateHighlightType | null;
268281

269282
/**
270283
* @description 아이템 리스트 유형
271284
*/
272-
item?: KakaoAlimtalkTemplateItemType;
285+
item?: KakaoAlimtalkTemplateItemType | null;
273286

274287
/**
275288
* @description 카카오 알림톡 템플릿 ID
@@ -314,8 +327,8 @@ export class KakaoAlimtalkTemplate implements KakaoAlimtalkTemplateInterface {
314327
buttons?: KakaoButton[];
315328
quickReplies?: KakaoAlimtalkTemplateQuickReply[];
316329
header?: string | null;
317-
highlight?: KakaoAlimtalkTemplateHighlightType;
318-
item?: KakaoAlimtalkTemplateItemType;
330+
highlight?: KakaoAlimtalkTemplateHighlightType | null;
331+
item?: KakaoAlimtalkTemplateItemType | null;
319332
templateId: string;
320333
commentable?: boolean;
321334
comments?: Array<KakaoAlimtalkTemplateCommentType>;
Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
1-
import {KakaoAlimtalkTemplate} from '../../base/kakao/kakaoAlimtalkTemplate';
1+
import {
2+
KakaoAlimtalkTemplateSchema,
3+
kakaoAlimtalkTemplateSchema,
4+
} from '@models/base/kakao/kakaoAlimtalkTemplate';
5+
import {Schema} from 'effect';
26
import {GetKakaoTemplateResponse} from './getKakaoTemplateResponse';
37

8+
export const getKakaoAlimtalkTemplatesResponseSchema = Schema.Struct({
9+
limit: Schema.Number,
10+
templateList: Schema.Array(kakaoAlimtalkTemplateSchema),
11+
startKey: Schema.String,
12+
nextKey: Schema.NullOr(Schema.String),
13+
});
14+
15+
export type GetKakaoAlimtalkTemplatesResponseSchema = Schema.Schema.Type<
16+
typeof getKakaoAlimtalkTemplatesResponseSchema
17+
>;
18+
419
export interface GetKakaoAlimtalkTemplatesResponse {
520
limit: number;
621
templateList: Array<GetKakaoTemplateResponse>;
@@ -10,7 +25,7 @@ export interface GetKakaoAlimtalkTemplatesResponse {
1025

1126
export interface GetKakaoAlimtalkTemplatesFinalizeResponse {
1227
limit: number;
13-
templateList: Array<KakaoAlimtalkTemplate>;
28+
templateList: Array<KakaoAlimtalkTemplateSchema>;
1429
startKey: string;
1530
nextKey: string | null;
1631
}

src/services/kakao/templates/kakaoTemplateService.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
KakaoAlimtalkTemplate,
44
KakaoAlimtalkTemplateCategory,
55
KakaoAlimtalkTemplateInterface,
6+
kakaoAlimtalkTemplateSchema,
67
} from '@models/base/kakao/kakaoAlimtalkTemplate';
78
import {CreateKakaoAlimtalkTemplateRequest} from '@models/requests/kakao/createKakaoAlimtalkTemplateRequest';
89
import {
@@ -12,9 +13,10 @@ import {
1213
import {UpdateKakaoAlimtalkTemplateRequest} from '@models/requests/kakao/updateKakaoAlimtalkTemplateRequest';
1314
import {
1415
GetKakaoAlimtalkTemplatesFinalizeResponse,
15-
GetKakaoAlimtalkTemplatesResponse,
16+
GetKakaoAlimtalkTemplatesResponseSchema,
1617
} from '@models/responses/kakao/getKakaoAlimtalkTemplatesResponse';
1718
import {GetKakaoTemplateResponse} from '@models/responses/kakao/getKakaoTemplateResponse';
19+
import {Effect, Schema, pipe} from 'effect';
1820
import DefaultService from '../../defaultService';
1921

2022
export default class KakaoTemplateService extends DefaultService {
@@ -66,19 +68,27 @@ export default class KakaoTemplateService extends DefaultService {
6668
payload = new GetKakaoAlimtalkTemplatesFinalizeRequest(data);
6769
}
6870

69-
const parameter = stringifyQuery(payload, {indices: false});
71+
const parameter = stringifyQuery(payload, {
72+
indices: false,
73+
addQueryPrefix: true,
74+
});
7075
const response = await this.request<
7176
never,
72-
GetKakaoAlimtalkTemplatesResponse
77+
GetKakaoAlimtalkTemplatesResponseSchema
7378
>({
7479
httpMethod: 'GET',
7580
url: `kakao/v2/templates${parameter}`,
7681
});
7782

78-
const templateList = new Array<KakaoAlimtalkTemplate>();
79-
for (const template of response.templateList) {
80-
templateList.push(new KakaoAlimtalkTemplate(template));
81-
}
83+
const processTemplate = (template: unknown) =>
84+
Schema.decodeUnknown(kakaoAlimtalkTemplateSchema)(template);
85+
86+
const processAllTemplates = pipe(
87+
Effect.all(response.templateList.map(processTemplate)),
88+
Effect.runPromise,
89+
);
90+
91+
const templateList = await processAllTemplates;
8292

8393
return {
8494
limit: response.limit,

src/services/messages/messageService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default class MessageService extends DefaultService {
8181
requestConfigParameter?: SendRequestConfigSchema,
8282
): Promise<DetailGroupMessageResponse> {
8383
const request = this.request.bind(this);
84-
const messageSchema = Schema.decodeUnknownSync(requestSendMessageSchema)(
84+
const messageSchema = Schema.encodeUnknownSync(requestSendMessageSchema)(
8585
messages,
8686
);
8787

@@ -103,7 +103,7 @@ export default class MessageService extends DefaultService {
103103
);
104104
}
105105

106-
const decodedConfig = Schema.decodeUnknownSync(sendRequestConfigSchema)(
106+
const decodedConfig = Schema.encodeUnknownSync(sendRequestConfigSchema)(
107107
requestConfigParameter ?? {},
108108
);
109109

0 commit comments

Comments
 (0)