mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-05-24 01:12:54 -04:00
* fix geFavorites return * add support for toggling to dense cards on desktop * add favorites page link * implement basic favorites page
69 lines
2.2 KiB
TypeScript
69 lines
2.2 KiB
TypeScript
import { BaseCRUDAPI } from "../_base";
|
|
import {
|
|
ChangePassword,
|
|
DeleteTokenResponse,
|
|
LongLiveTokenIn,
|
|
LongLiveTokenOut,
|
|
ResetPassword,
|
|
UserBase,
|
|
UserFavorites,
|
|
UserIn,
|
|
UserOut,
|
|
} from "~/types/api-types/user";
|
|
|
|
const prefix = "/api";
|
|
|
|
const routes = {
|
|
usersSelf: `${prefix}/users/self`,
|
|
passwordReset: `${prefix}/users/reset-password`,
|
|
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}`,
|
|
|
|
usersApiTokens: `${prefix}/users/api-tokens`,
|
|
usersApiTokensTokenId: (token_id: string | number) => `${prefix}/users/api-tokens/${token_id}`,
|
|
};
|
|
|
|
export class UserApi extends BaseCRUDAPI<UserIn, UserOut, UserBase> {
|
|
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) {
|
|
return await this.requests.get<UserFavorites>(routes.usersIdFavorites(id));
|
|
}
|
|
|
|
async changePassword(id: string, changePassword: ChangePassword) {
|
|
return await this.requests.put(routes.usersIdPassword(id), changePassword);
|
|
}
|
|
|
|
async createAPIToken(tokenName: LongLiveTokenIn) {
|
|
return await this.requests.post<LongLiveTokenOut>(routes.usersApiTokens, tokenName);
|
|
}
|
|
|
|
async deleteAPIToken(tokenId: number) {
|
|
return await this.requests.delete<DeleteTokenResponse>(routes.usersApiTokensTokenId(tokenId));
|
|
}
|
|
|
|
userProfileImage(id: string) {
|
|
if (!id || id === undefined) return;
|
|
return `/api/users/${id}/image`;
|
|
}
|
|
|
|
async resetPassword(payload: ResetPassword) {
|
|
return await this.requests.post(routes.passwordReset, payload);
|
|
}
|
|
}
|