| 
									
										
										
										
											2021-10-23 16:42:20 -08:00
										 |  |  | import { BaseCRUDAPI } from "../_base"; | 
					
						
							| 
									
										
										
										
											2022-06-13 09:33:46 -08:00
										 |  |  | import { | 
					
						
							|  |  |  |   ChangePassword, | 
					
						
							|  |  |  |   DeleteTokenResponse, | 
					
						
							|  |  |  |   LongLiveTokenIn, | 
					
						
							|  |  |  |   LongLiveTokenOut, | 
					
						
							|  |  |  |   ResetPassword, | 
					
						
							|  |  |  |   UserBase, | 
					
						
							|  |  |  |   UserFavorites, | 
					
						
							|  |  |  |   UserIn, | 
					
						
							|  |  |  |   UserOut, | 
					
						
							|  |  |  | } from "~/types/api-types/user"; | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const prefix = "/api"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const routes = { | 
					
						
							|  |  |  |   usersSelf: `${prefix}/users/self`, | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  |   passwordReset: `${prefix}/users/reset-password`, | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  |   users: `${prefix}/users`, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   usersIdImage: (id: string) => `${prefix}/users/${id}/image`, | 
					
						
							|  |  |  |   usersIdResetPassword: (id: string) => `${prefix}/users/${id}/reset-password`, | 
					
						
							|  |  |  |   usersId: (id: string) => `${prefix}/users/${id}`, | 
					
						
							|  |  |  |   usersIdPassword: (id: string) => `${prefix}/users/${id}/password`, | 
					
						
							|  |  |  |   usersIdFavorites: (id: string) => `${prefix}/users/${id}/favorites`, | 
					
						
							|  |  |  |   usersIdFavoritesSlug: (id: string, slug: string) => `${prefix}/users/${id}/favorites/${slug}`, | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   usersApiTokens: `${prefix}/users/api-tokens`, | 
					
						
							| 
									
										
										
										
											2021-08-21 00:46:43 -08:00
										 |  |  |   usersApiTokensTokenId: (token_id: string | number) => `${prefix}/users/api-tokens/${token_id}`, | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-21 21:22:02 +02:00
										 |  |  | export class UserApi extends BaseCRUDAPI<UserIn, UserOut, UserBase> { | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   baseRoute: string = routes.users; | 
					
						
							|  |  |  |   itemRoute = (itemid: string) => routes.usersId(itemid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async addFavorite(id: string, slug: string) { | 
					
						
							|  |  |  |     return await this.requests.post(routes.usersIdFavoritesSlug(id, slug), {}); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async removeFavorite(id: string, slug: string) { | 
					
						
							|  |  |  |     return await this.requests.delete(routes.usersIdFavoritesSlug(id, slug)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async getFavorites(id: string) { | 
					
						
							| 
									
										
										
										
											2022-06-13 09:33:46 -08:00
										 |  |  |     return await this.requests.get<UserFavorites>(routes.usersIdFavorites(id)); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async changePassword(id: string, changePassword: ChangePassword) { | 
					
						
							|  |  |  |     return await this.requests.put(routes.usersIdPassword(id), changePassword); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-21 21:22:02 +02:00
										 |  |  |   async createAPIToken(tokenName: LongLiveTokenIn) { | 
					
						
							|  |  |  |     return await this.requests.post<LongLiveTokenOut>(routes.usersApiTokens, tokenName); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-21 21:22:02 +02:00
										 |  |  |   async deleteAPIToken(tokenId: number) { | 
					
						
							|  |  |  |     return await this.requests.delete<DeleteTokenResponse>(routes.usersApiTokensTokenId(tokenId)); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   userProfileImage(id: string) { | 
					
						
							|  |  |  |     if (!id || id === undefined) return; | 
					
						
							|  |  |  |     return `/api/users/${id}/image`; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-21 21:22:02 +02:00
										 |  |  |   async resetPassword(payload: ResetPassword) { | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  |     return await this.requests.post(routes.passwordReset, payload); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | } |