From c68ea81cbd4025829c7a03cad3a4cb32f349aaed Mon Sep 17 00:00:00 2001 From: Patrick Roza Date: Sun, 19 Jan 2025 10:30:11 +0100 Subject: [PATCH] alt: still separate Domain. --- api/package.json | 40 +++++++------------ api/src/Accounts/UserRepo.ts | 4 +- api/src/Accounts/resolvers.ts | 2 +- api/src/Accounts/resources.ts | 2 +- api/src/Blog/BlogPostRepo.ts | 4 +- api/src/Blog/controllers.ts | 2 +- api/src/Blog/resources.ts | 2 +- api/src/{Blog/models.ts => Domain/Blog.ts} | 2 +- .../{Accounts/models.ts => Domain/User.ts} | 0 api/src/HelloWorld/controllers.ts | 2 +- api/src/UserProfile.ts | 2 +- api/src/resources/lib/req.ts | 2 +- api/tsconfig.json | 10 +---- api/tsconfig.src.json | 7 +--- frontend/composables/currentUser.ts | 2 +- frontend/nuxt.config.ts | 2 +- frontend/pages/blog/[id].vue | 2 +- 17 files changed, 34 insertions(+), 53 deletions(-) rename api/src/{Blog/models.ts => Domain/Blog.ts} (94%) rename api/src/{Accounts/models.ts => Domain/User.ts} (100%) diff --git a/api/package.json b/api/package.json index 487f3ba1..1e3b9201 100644 --- a/api/package.json +++ b/api/package.json @@ -55,16 +55,6 @@ } }, "imports": { - "#api/*": { - "import": { - "types": "./dist/*.d.ts", - "default": "./dist/*.js" - }, - "require": { - "types": "./dist/*.d.ts", - "default": "./_cjs/*.cjs" - } - }, "#core/*": { "import": { "types": "./dist/core/*.d.ts", @@ -75,16 +65,6 @@ "default": "./_cjs/core/*.cjs" } }, - "#models": { - "import": { - "types": "./dist/models.d.ts", - "default": "./dist/models.js" - }, - "require": { - "types": "./dist/models.d.ts", - "default": "./_cjs/models.cjs" - } - }, "#resources": { "import": { "types": "./dist/resources.d.ts", @@ -95,14 +75,14 @@ "default": "./_cjs/resources.cjs" } }, - "#models/*": { + "#Domain/*": { "import": { - "types": "./dist/models/*.d.ts", - "default": "./dist/models/*.js" + "types": "./dist/Domain/*.d.ts", + "default": "./dist/Domain/*.js" }, "require": { - "types": "./dist/models/*.d.ts", - "default": "./_cjs/models/*.cjs" + "types": "./dist/Domain/*.d.ts", + "default": "./_cjs/Domain/*.cjs" } }, "#resources/*": { @@ -114,6 +94,16 @@ "types": "./dist/resources/*.d.ts", "default": "./_cjs/resources/*.cjs" } + }, + "#api/*": { + "import": { + "types": "./dist/*.d.ts", + "default": "./dist/*.js" + }, + "require": { + "types": "./dist/*.d.ts", + "default": "./_cjs/*.cjs" + } } }, "dependencies": { diff --git a/api/src/Accounts/UserRepo.ts b/api/src/Accounts/UserRepo.ts index 001d2020..096bd32b 100644 --- a/api/src/Accounts/UserRepo.ts +++ b/api/src/Accounts/UserRepo.ts @@ -1,5 +1,7 @@ import { RepoConfig } from "#api/config" import { RepoDefault } from "#api/lib/layers" +import { User } from "#Domain/User" +import type { UserId } from "#Domain/User" import { Model } from "@effect-app/infra" import { NotFoundError, NotLoggedInError } from "@effect-app/infra/errors" import { Q } from "@effect-app/infra/Model" @@ -9,8 +11,6 @@ import { fakerArb } from "effect-app/faker" import { Email } from "effect-app/Schema" import fc from "fast-check" import { UserProfile } from "../UserProfile.js" -import type { UserId } from "./models.js" -import { User } from "./models.js" export type UserSeed = "sample" | "" diff --git a/api/src/Accounts/resolvers.ts b/api/src/Accounts/resolvers.ts index a9daba4c..c12d0197 100644 --- a/api/src/Accounts/resolvers.ts +++ b/api/src/Accounts/resolvers.ts @@ -1,9 +1,9 @@ +import { UserId } from "#Domain/User" import { clientFor } from "#resources/lib" import { Effect, Exit, Request, RequestResolver } from "effect" import { Array, Option, pipe, S } from "effect-app" import { ApiClientFactory, NotFoundError } from "effect-app/client" import { type Schema } from "effect-app/Schema" -import { UserId } from "./models.js" import { AccountsRsc, UserView } from "./resources.js" interface GetUserViewById extends Request.Request> { diff --git a/api/src/Accounts/resources.ts b/api/src/Accounts/resources.ts index 3405b655..0ad33505 100644 --- a/api/src/Accounts/resources.ts +++ b/api/src/Accounts/resources.ts @@ -1,6 +1,6 @@ +import { User, UserId } from "#Domain/User" import { S } from "#resources/lib" import { NotFoundError } from "effect-app/client" -import { User, UserId } from "./models.js" export class UserView extends S.ExtendedClass()({ ...User.pick("id", "role"), diff --git a/api/src/Blog/BlogPostRepo.ts b/api/src/Blog/BlogPostRepo.ts index 73788765..e9a7b6bf 100644 --- a/api/src/Blog/BlogPostRepo.ts +++ b/api/src/Blog/BlogPostRepo.ts @@ -1,11 +1,11 @@ -import { UserFromIdResolver } from "#Accounts/models" import { UserRepo } from "#Accounts/UserRepo" import { RepoDefault } from "#api/lib/layers" +import { BlogPost } from "#Domain/Blog" +import { UserFromIdResolver } from "#Domain/User" import { Model } from "@effect-app/infra" import { Effect } from "effect" import { Context } from "effect-app" import { NonEmptyString255, NonEmptyString2k } from "effect-app/Schema" -import { BlogPost } from "./models.js" export type BlogPostSeed = "sample" | "" diff --git a/api/src/Blog/controllers.ts b/api/src/Blog/controllers.ts index 22e1975b..d98d249a 100644 --- a/api/src/Blog/controllers.ts +++ b/api/src/Blog/controllers.ts @@ -1,6 +1,7 @@ import { UserRepo } from "#api/Accounts/UserRepo" import { Events } from "#api/Events" import { matchFor, Router } from "#api/lib/routing" +import { BlogPost } from "#Domain/Blog" import { BogusEvent } from "#resources/Events" import { Operations } from "@effect-app/infra/Operations" import { Duration, Effect, Schedule } from "effect" @@ -8,7 +9,6 @@ import { Option } from "effect-app" import { NonEmptyString2k, NonNegativeInt } from "effect-app/Schema" import { OperationsDefault } from "../lib/layers.js" import { BlogPostRepo } from "./BlogPostRepo.js" -import { BlogPost } from "./models.js" import { BlogRsc } from "./resources.js" export default Router(BlogRsc)({ diff --git a/api/src/Blog/resources.ts b/api/src/Blog/resources.ts index 38535d2a..2aa0551d 100644 --- a/api/src/Blog/resources.ts +++ b/api/src/Blog/resources.ts @@ -1,8 +1,8 @@ import { UserViewFromId } from "#api/Accounts/resolvers" +import { BlogPost, BlogPostId } from "#Domain/Blog" import { S } from "#resources/lib" import { InvalidStateError, NotFoundError, OptimisticConcurrencyException } from "effect-app/client" import { OperationId } from "effect-app/Operations" -import { BlogPost, BlogPostId } from "./models.js" export class BlogPostView extends S.ExtendedClass()({ ...BlogPost.omit("author"), diff --git a/api/src/Blog/models.ts b/api/src/Domain/Blog.ts similarity index 94% rename from api/src/Blog/models.ts rename to api/src/Domain/Blog.ts index 60f85435..ffb31e21 100644 --- a/api/src/Blog/models.ts +++ b/api/src/Domain/Blog.ts @@ -1,5 +1,5 @@ -import { UserFromId } from "#Accounts/models" import { S } from "effect-app" +import { UserFromId } from "./User.js" export const BlogPostId = S.prefixedStringId()("post", "BlogPostId") export interface BlogPostIdBrand { diff --git a/api/src/Accounts/models.ts b/api/src/Domain/User.ts similarity index 100% rename from api/src/Accounts/models.ts rename to api/src/Domain/User.ts diff --git a/api/src/HelloWorld/controllers.ts b/api/src/HelloWorld/controllers.ts index f7f01ec2..e4d1eaee 100644 --- a/api/src/HelloWorld/controllers.ts +++ b/api/src/HelloWorld/controllers.ts @@ -1,6 +1,6 @@ -import { User } from "#api/Accounts/models" import { UserRepo } from "#api/Accounts/UserRepo" import { matchFor, Router } from "#api/lib/routing" +import { User } from "#Domain/User" import { getRequestContext } from "@effect-app/infra/api/setupRequest" import { generate } from "@effect-app/infra/test" import { Effect, S } from "effect-app" diff --git a/api/src/UserProfile.ts b/api/src/UserProfile.ts index 176b9e2b..6a4229d0 100644 --- a/api/src/UserProfile.ts +++ b/api/src/UserProfile.ts @@ -1,7 +1,7 @@ +import { Role } from "#Domain/User" import { parseJwt } from "@effect-app/infra/api/routing/schema/jwt" import { Context, S } from "effect-app" import { UserProfileId } from "effect-app/ids" -import { Role } from "./Accounts/models.js" export class UserProfile extends Context.assignTag()( S.Class()({ diff --git a/api/src/resources/lib/req.ts b/api/src/resources/lib/req.ts index bbd41f14..cb3c0636 100644 --- a/api/src/resources/lib/req.ts +++ b/api/src/resources/lib/req.ts @@ -1,4 +1,4 @@ -import type { Role } from "#api/Accounts/models" +import type { Role } from "#Domain/User" import { NotLoggedInError, UnauthorizedError } from "@effect-app/infra/errors" import { Duration, Layer, Request as EffectRequest } from "effect-app" import type { RPCContextMap } from "effect-app/client" diff --git a/api/tsconfig.json b/api/tsconfig.json index a7e78327..5c389be0 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -20,14 +20,8 @@ "#resources": [ "./src/resources.js" ], - "#models": [ - "./src/models.js" - ], - "#resources/*": [ - "./src/resources/*.js" - ], - "#models/*": [ - "./src/models/*.js" + "#Domain/*": [ + "./src/Domain/*.js" ], "#api/*": [ "./src/*.js" diff --git a/api/tsconfig.src.json b/api/tsconfig.src.json index 7af8e8cb..e14e9d1d 100644 --- a/api/tsconfig.src.json +++ b/api/tsconfig.src.json @@ -30,14 +30,11 @@ "#resources": [ "./src/resources.js" ], - "#models": [ - "./src/models.js" - ], "#resources/*": [ "./src/resources/*.js" ], - "#models/*": [ - "./src/models/*.js" + "#Domain/*": [ + "./src/Domain/*.js" ], "#api/*": [ "./src/*.js" diff --git a/frontend/composables/currentUser.ts b/frontend/composables/currentUser.ts index 662428da..9b59a6a9 100644 --- a/frontend/composables/currentUser.ts +++ b/frontend/composables/currentUser.ts @@ -1,6 +1,6 @@ // Naive login, good enough for the start -import type { UserId } from "#Accounts/models" +import type { UserId } from "#Domain/User" export function getUserId() { return useCookie("user-id") diff --git a/frontend/nuxt.config.ts b/frontend/nuxt.config.ts index c2ccb87f..27c6719f 100644 --- a/frontend/nuxt.config.ts +++ b/frontend/nuxt.config.ts @@ -25,13 +25,13 @@ export default defineNuxtConfig({ alias: { ...[ + "Domain", // TODO: auto gen "Accounts", "Blog", "Operations", "HelloWorld", "resources", - "models", ].reduce( (prev, cur) => { prev[`#${cur}`] = fileURLToPath( diff --git a/frontend/pages/blog/[id].vue b/frontend/pages/blog/[id].vue index 23026bc8..5d677333 100644 --- a/frontend/pages/blog/[id].vue +++ b/frontend/pages/blog/[id].vue @@ -1,6 +1,6 @@