From f2bbd9791fd750ad22568b6d7145c754c5ace908 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Mon, 6 Apr 2026 14:24:31 +0200 Subject: [PATCH] feat(core): add application interfaces (repositories + services) --- .../articles.repository.interface.ts | 16 ++++++++++++++++ .../core/src/application/repositories/index.ts | 2 ++ .../repositories/users.repository.interface.ts | 7 +++++++ .../services/auth.service.interface.ts | 14 ++++++++++++++ packages/core/src/application/services/index.ts | 2 ++ .../services/telemetry.service.interface.ts | 3 +++ 6 files changed, 44 insertions(+) create mode 100644 packages/core/src/application/repositories/articles.repository.interface.ts create mode 100644 packages/core/src/application/repositories/index.ts create mode 100644 packages/core/src/application/repositories/users.repository.interface.ts create mode 100644 packages/core/src/application/services/auth.service.interface.ts create mode 100644 packages/core/src/application/services/index.ts create mode 100644 packages/core/src/application/services/telemetry.service.interface.ts diff --git a/packages/core/src/application/repositories/articles.repository.interface.ts b/packages/core/src/application/repositories/articles.repository.interface.ts new file mode 100644 index 0000000..c71c948 --- /dev/null +++ b/packages/core/src/application/repositories/articles.repository.interface.ts @@ -0,0 +1,16 @@ +import type { Article } from "@/entities/models/article.js"; + +export interface IArticlesRepository { + getArticle(id: string): Promise
; + getArticles(options?: { + status?: string; + authorId?: string; + limit?: number; + offset?: number; + }): Promise; + createArticle(input: Article): Promise
; + updateArticle( + id: string, + input: Partial
+ ): Promise
; +} diff --git a/packages/core/src/application/repositories/index.ts b/packages/core/src/application/repositories/index.ts new file mode 100644 index 0000000..4290829 --- /dev/null +++ b/packages/core/src/application/repositories/index.ts @@ -0,0 +1,2 @@ +export type { IUsersRepository } from "./users.repository.interface.js"; +export type { IArticlesRepository } from "./articles.repository.interface.js"; diff --git a/packages/core/src/application/repositories/users.repository.interface.ts b/packages/core/src/application/repositories/users.repository.interface.ts new file mode 100644 index 0000000..8b1bd3a --- /dev/null +++ b/packages/core/src/application/repositories/users.repository.interface.ts @@ -0,0 +1,7 @@ +import type { User } from "@/entities/models/user.js"; + +export interface IUsersRepository { + getUser(id: string): Promise; + getUserByUsername(username: string): Promise; + createUser(input: User): Promise; +} diff --git a/packages/core/src/application/services/auth.service.interface.ts b/packages/core/src/application/services/auth.service.interface.ts new file mode 100644 index 0000000..d195fb6 --- /dev/null +++ b/packages/core/src/application/services/auth.service.interface.ts @@ -0,0 +1,14 @@ +import type { Cookie } from "@/entities/models/cookie.js"; +import type { Session } from "@/entities/models/session.js"; +import type { User } from "@/entities/models/user.js"; + +export interface IAuthenticationService { + generateUserId(): string; + hashPassword(password: string): Promise; + verifyPassword(hash: string, password: string): Promise; + validateSession( + sessionId: string + ): Promise<{ user: User; session: Session }>; + createSession(user: User): Promise<{ session: Session; cookie: Cookie }>; + invalidateSession(sessionId: string): Promise<{ blankCookie: Cookie }>; +} diff --git a/packages/core/src/application/services/index.ts b/packages/core/src/application/services/index.ts new file mode 100644 index 0000000..4a8cb14 --- /dev/null +++ b/packages/core/src/application/services/index.ts @@ -0,0 +1,2 @@ +export type { IAuthenticationService } from "./auth.service.interface.js"; +export type { ITelemetryService } from "./telemetry.service.interface.js"; diff --git a/packages/core/src/application/services/telemetry.service.interface.ts b/packages/core/src/application/services/telemetry.service.interface.ts new file mode 100644 index 0000000..56e5ec9 --- /dev/null +++ b/packages/core/src/application/services/telemetry.service.interface.ts @@ -0,0 +1,3 @@ +export interface ITelemetryService { + startSpan(name: string, fn: () => T | Promise): Promise; +}