@@ -6,6 +6,7 @@ import {PrismaService} from "../misc/prisma.service";
66import { MiscService } from "../misc/misc.service" ;
77import { EpisodeProgressions , Images , Users } from "@prisma/client" ;
88import { JwtService } from "@nestjs/jwt" ;
9+ import { EpisodeProgressionPayload } from "./models/payloads/episode-progression.payload" ;
910
1011@Injectable ( )
1112export class UsersService {
@@ -109,11 +110,24 @@ export class UsersService{
109110 } ;
110111 }
111112
112- async getWebtoonProgression ( user : UserEntity , webtoonId : number ) {
113- // TODO
113+ async getWebtoonProgression ( user : UserEntity , webtoonId : number ) : Promise < EpisodeProgressionPayload [ ] > {
114+ const episodeProgressions : EpisodeProgressions [ ] = await this . prismaService . episodeProgressions . findMany ( {
115+ where : {
116+ user_id : user . id ,
117+ episode : {
118+ webtoon_id : webtoonId ,
119+ } ,
120+ } ,
121+ } ) ;
122+ if ( ! episodeProgressions . length )
123+ return [ ] ;
124+ return episodeProgressions . map ( ( episodeProgression : EpisodeProgressions ) : EpisodeProgressionPayload => ( {
125+ episodeId : episodeProgression . episode_id ,
126+ progression : episodeProgression . progression ,
127+ } ) ) ;
114128 }
115129
116- async getEpisodeProgression ( user : UserEntity , episodeId : number ) : Promise < number > {
130+ async getEpisodeProgression ( user : UserEntity , episodeId : number ) : Promise < EpisodeProgressionPayload > {
117131 const episodeProgression : EpisodeProgressions = await this . prismaService . episodeProgressions . findUnique ( {
118132 where : {
119133 user_id_episode_id : {
@@ -124,34 +138,68 @@ export class UsersService{
124138 } ) ;
125139 if ( ! episodeProgression )
126140 throw new NotFoundException ( "Episode progression not found" ) ;
127- return episodeProgression . progression ;
141+ return {
142+ episodeId,
143+ progression : episodeProgression . progression ,
144+ } as EpisodeProgressionPayload ;
128145 }
129146
130147 async setEpisodeProgression ( user : UserEntity , episodeId : number , progression : number ) {
131- const episodeProgression : EpisodeProgressions = await this . prismaService . episodeProgressions . findUnique ( {
148+ const episodeProgression : EpisodeProgressions | undefined = await this . prismaService . episodeProgressions . findUnique ( {
132149 where : {
133150 user_id_episode_id : {
134151 user_id : user . id ,
135152 episode_id : episodeId ,
136153 } ,
137154 } ,
138155 } ) ;
139- if ( ! episodeProgression )
140- throw new NotFoundException ( "Episode progression not found" ) ;
141156 if ( progression < 0 )
142157 throw new BadRequestException ( "Invalid progression" ) ;
143- if ( progression < episodeProgression . progression )
158+ if ( progression < ( episodeProgression ? .progression || 0 ) )
144159 throw new BadRequestException ( "New progression must be greater than existing one" ) ;
145- await this . prismaService . episodeProgressions . update ( {
160+ await this . prismaService . episodeProgressions . upsert ( {
146161 where : {
147162 user_id_episode_id : {
148- user_id : episodeProgression . user_id ,
149- episode_id : episodeProgression . episode_id ,
163+ user_id : user . id ,
164+ episode_id : episodeId ,
150165 } ,
151166 } ,
152- data : {
167+ create : {
168+ user_id : user . id ,
169+ episode_id : episodeId ,
153170 progression,
154171 } ,
172+ update : {
173+ progression,
174+ } ,
175+ } ) ;
176+ }
177+
178+ async deleteAllProgressions ( user : UserEntity ) {
179+ await this . prismaService . episodeProgressions . deleteMany ( {
180+ where : {
181+ user_id : user . id ,
182+ } ,
183+ } ) ;
184+ }
185+
186+ async deleteWebtoonProgression ( user : UserEntity , webtoonId : number ) {
187+ await this . prismaService . episodeProgressions . deleteMany ( {
188+ where : {
189+ user_id : user . id ,
190+ episode : {
191+ webtoon_id : webtoonId ,
192+ } ,
193+ } ,
194+ } ) ;
195+ }
196+
197+ async deleteEpisodeProgression ( user : UserEntity , episodeId : number ) {
198+ await this . prismaService . episodeProgressions . deleteMany ( {
199+ where : {
200+ user_id : user . id ,
201+ episode_id : episodeId ,
202+ } ,
155203 } ) ;
156204 }
157205}
0 commit comments