Skip to content

Commit fe7164c

Browse files
committed
✨ Добавлены новые функции для работы с уважением, включая действия и обработчики. Обновлены маршруты для поддержки нового эндпоинта "/api/v1/cock/respects". Также улучшены типы и схемы для корректной обработки данных о уважении. Обновлены зависимости и инъекции для интеграции нового функционала.
1 parent b63fdfd commit fe7164c

14 files changed

Lines changed: 92 additions & 287 deletions

File tree

src/app/container.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { createGetLadderAction, createLadderHandler } from "@/features/ladder";
1313
import { createExportMetricsAction, createMetricsHandler } from "@/features/metrics";
1414
import { createGetProfileAction, createMeHandler, createPrivacyHandler, createUpdatePrivacyAction } from "@/features/profile";
1515
import { createGetRaceAction, createRaceHandler } from "@/features/race";
16+
import { createGetRespectAction, createRespectsHandler } from "@/features/respects";
1617
import { createGetRulerAction, createRulerHandler } from "@/features/ruler";
1718
import { createGetSeasonsAction, createSeasonsHandler } from "@/features/seasons";
1819
import type { AppConfig } from "@/shared/config/schema";
@@ -46,6 +47,7 @@ export const createContainer = (config: AppConfig, botToken: string, mongo: Db,
4647
.provideFactory(di.getAchievementsAction, createGetAchievementsAction)
4748
.provideFactory(di.getLadderAction, createGetLadderAction)
4849
.provideFactory(di.getSeasonsAction, createGetSeasonsAction)
50+
.provideFactory(di.getRespectAction, createGetRespectAction)
4951
// Handlers
5052
.provideFactory(di.authHandler, createAuthHandler)
5153
.provideFactory(di.healthHandler, createHealthHandler)
@@ -59,6 +61,7 @@ export const createContainer = (config: AppConfig, botToken: string, mongo: Db,
5961
.provideFactory(di.dynamicPersonalHandler, createDynamicPersonalHandler)
6062
.provideFactory(di.achievementsHandler, createAchievementsHandler)
6163
.provideFactory(di.ladderHandler, createLadderHandler)
62-
.provideFactory(di.seasonsHandler, createSeasonsHandler);
64+
.provideFactory(di.seasonsHandler, createSeasonsHandler)
65+
.provideFactory(di.respectsHandler, createRespectsHandler);
6366

6467
export type Container = ReturnType<typeof createContainer>;

src/app/routing/routes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ export const createRoutes = (container: Container, routeOf: Pipeline): Record<st
2020
"/api/v1/cock/achievements": { GET: routeOf(h(di.achievementsHandler), { protected: true }) },
2121
"/api/v1/cock/ladder": { GET: routeOf(h(di.ladderHandler)) },
2222
"/api/v1/cock/seasons": { GET: routeOf(h(di.seasonsHandler)) },
23+
"/api/v1/cock/respects": { GET: routeOf(h(di.respectsHandler), { protected: true }) },
2324
};
2425
};

src/features/achievements/get-achievements.action.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,11 @@ const formatResponse = (userAchievements: AchievementDoc[]): CockAchievementsRes
261261
return 0;
262262
});
263263

264-
return { achievements: result };
264+
const achievements_total = result.length;
265+
const achievements_done = result.filter((a) => a.completed).length;
266+
const achievements_done_percent = achievements_total > 0 ? Math.round((achievements_done / achievements_total) * 100) : 0;
267+
268+
return { achievements: result, achievements_total, achievements_done, achievements_done_percent };
265269
};
266270

267271
const updateAllLastChecked = async (achievementDal: AchievementDal, userId: number, now: Date) => {

src/features/achievements/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { AchievementSchema } from "@/entities/achievement";
33

44
export const CockAchievementsResponseSchema = z.object({
55
achievements: AchievementSchema.array(),
6+
achievements_total: z.number(),
7+
achievements_done: z.number(),
8+
achievements_done_percent: z.number(),
69
});
710

811
export type CockAchievementsResponse = z.infer<typeof CockAchievementsResponseSchema>;

src/features/dynamics/IMPLEMENTATION.md

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

src/features/dynamics/db/pipelines_personal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ export const pPersonalRecordAndDates = (userId: number): PipelineStage[] => [
321321
*/
322322
export const pPersonalGrowthSpeed = (userId: number): PipelineStage[] => [
323323
{ $match: { user_id: userId } },
324+
{ $sort: { requested_at: 1 } },
324325
{
325326
$group: {
326327
_id: {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { di } from "@/shared/injection";
2+
import { success } from "@/shared/net/response";
3+
import type { Handler } from "@/shared/net/types";
4+
import type { RespectResponse } from "../types";
5+
6+
type GetRespectAction = () => Promise<RespectResponse>;
7+
8+
export const createRespectsHandler =
9+
(getRespectAction: GetRespectAction): Handler =>
10+
async () =>
11+
success(await getRespectAction());
12+
13+
createRespectsHandler.inject = [di.getRespectAction] as const;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { RespectResponse } from "./types";
2+
3+
export const createGetRespectAction = () => async (): Promise<RespectResponse> => ({
4+
total_respect: 0,
5+
});
6+
7+
createGetRespectAction.inject = [] as const;

src/features/respects/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export { createRespectsHandler } from "./api/handler";
2+
export { createGetRespectAction } from "./get-respect.action";
3+
export type { RespectResponse } from "./types";

src/features/respects/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { z } from "zod";
2+
3+
export const RespectResponseSchema = z.object({
4+
total_respect: z.number(),
5+
});
6+
7+
export type RespectResponse = z.infer<typeof RespectResponseSchema>;

0 commit comments

Comments
 (0)