Skip to content

Commit fcf2cb9

Browse files
committed
✨ Add webtoon and episode progression routes
1 parent 95967df commit fcf2cb9

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

src/modules/users/users.controller.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,25 @@ export class UsersController{
3939
async setAvatar(@User() user: UserEntity, @Param("sum") sum: string): Promise<void>{
4040
await this.usersService.setAvatar(user, sum);
4141
}
42+
43+
@Get("progression/webtoon/:webtoon_id")
44+
@UseGuards(AuthGuard("jwt"))
45+
@ApiBearerAuth()
46+
async getWebtoonProgression(@User() user: UserEntity, @Param("webtoon_id") webtoonId: number){
47+
return await this.usersService.getWebtoonProgression(user, webtoonId);
48+
}
49+
50+
@Get("progression/episode/:episode_id")
51+
@UseGuards(AuthGuard("jwt"))
52+
@ApiBearerAuth()
53+
async getEpisodeProgression(@User() user: UserEntity, @Param("episode_id") episodeId: number){
54+
return await this.usersService.getEpisodeProgression(user, episodeId);
55+
}
56+
57+
@Post("progression/:episode_id")
58+
@UseGuards(AuthGuard("jwt"))
59+
@ApiBearerAuth()
60+
async setEpisodeProgression(@User() user: UserEntity, @Param("episode_id") episodeId: number, @Body("progression") progression: number): Promise<void>{
61+
await this.usersService.setEpisodeProgression(user, episodeId, progression);
62+
}
4263
}

src/modules/users/users.service.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {LoginPayload} from "./models/payloads/login.payload";
44
import {UserEntity} from "./models/entities/user.entity";
55
import {PrismaService} from "../misc/prisma.service";
66
import {MiscService} from "../misc/misc.service";
7-
import {Images, Users} from "@prisma/client";
7+
import {EpisodeProgressions, Images, Users} from "@prisma/client";
88
import {JwtService} from "@nestjs/jwt";
99

1010
@Injectable()
@@ -108,4 +108,50 @@ export class UsersService{
108108
}),
109109
};
110110
}
111+
112+
async getWebtoonProgression(user: UserEntity, webtoonId: number){
113+
// TODO
114+
}
115+
116+
async getEpisodeProgression(user: UserEntity, episodeId: number): Promise<number>{
117+
const episodeProgression: EpisodeProgressions = await this.prismaService.episodeProgressions.findUnique({
118+
where: {
119+
user_id_episode_id: {
120+
user_id: user.id,
121+
episode_id: episodeId,
122+
},
123+
},
124+
});
125+
if(!episodeProgression)
126+
throw new NotFoundException("Episode progression not found");
127+
return episodeProgression.progression;
128+
}
129+
130+
async setEpisodeProgression(user: UserEntity, episodeId: number, progression: number){
131+
const episodeProgression: EpisodeProgressions = await this.prismaService.episodeProgressions.findUnique({
132+
where: {
133+
user_id_episode_id: {
134+
user_id: user.id,
135+
episode_id: episodeId,
136+
},
137+
},
138+
});
139+
if(!episodeProgression)
140+
throw new NotFoundException("Episode progression not found");
141+
if(progression < 0)
142+
throw new BadRequestException("Invalid progression");
143+
if(progression < episodeProgression.progression)
144+
throw new BadRequestException("New progression must be greater than existing one");
145+
await this.prismaService.episodeProgressions.update({
146+
where: {
147+
user_id_episode_id: {
148+
user_id: episodeProgression.user_id,
149+
episode_id: episodeProgression.episode_id,
150+
},
151+
},
152+
data: {
153+
progression,
154+
},
155+
});
156+
}
111157
}

0 commit comments

Comments
 (0)