Skip to content

Commit ba73ead

Browse files
authored
Merge pull request #9 from chingu-x/dev
release: user module
2 parents 87deb60 + 193383b commit ba73ead

File tree

18 files changed

+260
-27
lines changed

18 files changed

+260
-27
lines changed

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,18 @@
7070
"./test": {
7171
"import": "./dist/test/index.js",
7272
"types": "./dist/test/index.d.ts"
73+
},
74+
"./user": {
75+
"import": "./dist/user/index.js",
76+
"types": "./dist/user/index.d.ts"
7377
}
7478
},
7579
"dependencies": {
7680
"axios": "^1.7.9",
81+
"date-fns": "^4.1.0",
82+
"date-fns-tz": "^3.2.0",
7783
"dotenv": "^16.4.7",
7884
"reflect-metadata": "^0.2.2",
7985
"tsyringe": "^4.8.0"
8086
}
81-
}
87+
}

pnpm-lock.yaml

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/auth/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export { AuthClientAdapter } from "./adapters/primary/authClientAdapter";
22
export { AuthApiAdapter } from "./adapters/secondary/authApiAdapter";
3-
export { default as AuthUrls } from "./application/constants/authUrls";
43
export {
54
LoginRequestDto,
65
RequestResetPasswordDto,

src/config.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@ import { LogoutUsecase } from "./auth/application/usecases/logoutUsecase";
77
import { RequestResetPasswordUsecase } from "./auth/application/usecases/requestResetPasswordUsecase";
88
import { ResetPasswordUsecase } from "./auth/application/usecases/resetPasswordUsecase";
99
import { AuthClientAdapter } from "./auth/adapters/primary/authClientAdapter";
10+
import { UserApiAdapter } from "./user/adapters/secondary/userApiAdapter";
11+
import { GetUserUsecase } from "./user/application/usecases/getUserUsecase";
12+
import { GetChinguMemberStatusUsecase } from "./user/application/usecases/getChinguMemberStatusUsecase";
13+
import { UserClientAdapter } from "./user/adapters/primary/userClientAdapter";
1014

1115
container.register(TYPES.RestApiPort, { useClass: AxiosAdapter });
1216
container.register(TYPES.AuthApiPort, { useClass: AuthApiAdapter });
13-
// container.register(TYPES.UserApiPort, { useClass: UserApiAdapter });
17+
container.register(TYPES.UserApiPort, { useClass: UserApiAdapter });
1418
container.register(TYPES.LoginUsecase, { useClass: LoginUsecase });
1519
container.register(TYPES.LogoutUsecase, { useClass: LogoutUsecase });
1620
container.register(TYPES.RequestResetPasswordUsecase, {
@@ -20,11 +24,11 @@ container.register(TYPES.ResetPasswordUsecase, {
2024
useClass: ResetPasswordUsecase,
2125
});
2226
container.register(TYPES.AuthClientAdapter, { useClass: AuthClientAdapter });
23-
// container.register(TYPES.GetUserUsecase, { useClass: GetUserUsecase });
24-
// container.register(TYPES.GetChinguMemberStatusUsecase, {
25-
// useClass: GetChinguMemberStatusUsecase,
26-
// });
27-
// container.register(TYPES.UserClientAdapter, { useClass: UserClientAdapter });
27+
container.register(TYPES.GetUserUsecase, { useClass: GetUserUsecase });
28+
container.register(TYPES.GetChinguMemberStatusUsecase, {
29+
useClass: GetChinguMemberStatusUsecase,
30+
});
31+
container.register(TYPES.UserClientAdapter, { useClass: UserClientAdapter });
2832
// container.register(TYPES.VoyageTeamClientAdapter, {
2933
// useClass: VoyageTeamClientAdapter,
3034
// });

src/rest-api/index.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/types.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { InjectionToken } from "tsyringe";
2-
import type { RestApiPort } from "./rest-api";
2+
import type { RestApiPort } from "./rest-api/ports/secondary/restApiPort";
33
import type {
44
AuthApiPort,
55
AuthClientAdapter,
@@ -8,12 +8,16 @@ import type {
88
RequestResetPasswordUsecase,
99
ResetPasswordUsecase,
1010
} from "./auth";
11+
import type { UserApiPort } from "./user/ports/secondary/userApiPort";
12+
import type { UserClientAdapter } from "./user/adapters/primary/userClientAdapter";
13+
import type { GetUserUsecase } from "./user/application/usecases/getUserUsecase";
14+
import type { GetChinguMemberStatusUsecase } from "./user/application/usecases/getChinguMemberStatusUsecase";
1115

1216
export const TYPES = {
1317
/* Ports */
1418
RestApiPort: Symbol.for("RestApiPort") as InjectionToken<RestApiPort>,
1519
AuthApiPort: Symbol.for("AuthApiPort") as InjectionToken<AuthApiPort>,
16-
// UserApiPort: Symbol.for("UserApiPort") as InjectionToken<UserApiPort>,
20+
UserApiPort: Symbol.for("UserApiPort") as InjectionToken<UserApiPort>,
1721
// VoyageTeamClientPort: Symbol.for(
1822
// "VoyageTeamClientPort"
1923
// ) as InjectionToken<VoyageTeamClientPort>,
@@ -22,22 +26,22 @@ export const TYPES = {
2226
AuthClientAdapter: Symbol.for(
2327
"AuthClientAdapter",
2428
) as InjectionToken<AuthClientAdapter>,
25-
// UserClientAdapter: Symbol.for(
26-
// "UserClientAdapter"
27-
// ) as InjectionToken<UserClientAdapter>,
29+
UserClientAdapter: Symbol.for(
30+
"UserClientAdapter",
31+
) as InjectionToken<UserClientAdapter>,
2832
// VoyageTeamClientAdapter: Symbol.for(
2933
// "VoyageTeamClientAdapter"
3034
// ) as InjectionToken<VoyageTeamClientAdapter>,
3135

3236
/* UseCases */
3337
LoginUsecase: Symbol.for("LoginUsecase") as InjectionToken<LoginUsecase>,
3438
LogoutUsecase: Symbol.for("LogoutUsecase") as InjectionToken<LogoutUsecase>,
35-
// GetUserUsecase: Symbol.for(
36-
// "GetUserUsecase"
37-
// ) as InjectionToken<GetUserUsecase>,
38-
// GetChinguMemberStatusUsecase: Symbol.for(
39-
// "GetChinguMemberStatusUsecase"
40-
// ) as InjectionToken<GetChinguMemberStatusUsecase>,
39+
GetUserUsecase: Symbol.for(
40+
"GetUserUsecase",
41+
) as InjectionToken<GetUserUsecase>,
42+
GetChinguMemberStatusUsecase: Symbol.for(
43+
"GetChinguMemberStatusUsecase",
44+
) as InjectionToken<GetChinguMemberStatusUsecase>,
4145
RequestResetPasswordUsecase: Symbol.for(
4246
"RequestResetPasswordUsecase",
4347
) as InjectionToken<RequestResetPasswordUsecase>,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { inject, injectable } from "tsyringe";
2+
import { TYPES } from "@/types";
3+
import { UserClientPort } from "@/user/ports/primary/userClientPort";
4+
import {
5+
GetChinguMemberStatusResponseDto,
6+
GetUserResponseDto,
7+
} from "@/user/application/dtos/response.dto";
8+
import { GetUserUsecase } from "@/user/application/usecases/getUserUsecase";
9+
import { GetUserRequestDto } from "@/user/application/dtos/request.dtos";
10+
import { GetChinguMemberStatusUsecase } from "@/user/application/usecases/getChinguMemberStatusUsecase";
11+
12+
@injectable()
13+
export class UserClientAdapter implements UserClientPort {
14+
constructor(
15+
@inject(TYPES.GetUserUsecase)
16+
private readonly getUserUsecase: GetUserUsecase,
17+
18+
@inject(TYPES.GetChinguMemberStatusUsecase)
19+
private readonly getChinguMemberStatusUsecase: GetChinguMemberStatusUsecase,
20+
) {}
21+
22+
async getUser(): Promise<GetUserResponseDto> {
23+
return await this.getUserUsecase.execute();
24+
}
25+
26+
getChinguMemberStatus(
27+
user: GetUserRequestDto,
28+
): GetChinguMemberStatusResponseDto {
29+
return this.getChinguMemberStatusUsecase.execute(user);
30+
}
31+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { inject, injectable } from "tsyringe";
2+
import { TYPES } from "@/types";
3+
import { RestApiPort } from "@/rest-api/ports/secondary/restApiPort";
4+
import { UserApiPort } from "@/user/ports/secondary/userApiPort";
5+
import { GetUserResponseDto } from "@/user/application/dtos/response.dto";
6+
import UserUrls from "@/user/application/constants/userUrls";
7+
8+
@injectable()
9+
export class UserApiAdapter implements UserApiPort {
10+
constructor(
11+
@inject(TYPES.RestApiPort)
12+
private readonly apiClient: RestApiPort,
13+
) {}
14+
15+
async getUser(): Promise<GetUserResponseDto> {
16+
return await this.apiClient.get({
17+
url: UserUrls.getUser(),
18+
});
19+
}
20+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const UserUrls = {
2+
getUser() {
3+
return "/api/v1/users/me";
4+
},
5+
} as const;
6+
7+
export default UserUrls;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import type { User } from "@/user/application/types";
2+
3+
export type GetUserRequestDto = User;

0 commit comments

Comments
 (0)