From 73b78db66c2c69ff8790bda714e5c18a3f3ad53a Mon Sep 17 00:00:00 2001 From: Patrick Roza Date: Sat, 18 Jan 2025 21:25:05 +0100 Subject: [PATCH 1/4] initial awesome --- .vscode/model.code-snippets | 2 +- api/src/Accounts.controllers.ts | 15 ------------- .../DBContext => Accounts}/UserRepo.ts | 6 ++--- .../resolvers => Accounts}/UserResolver.ts | 8 +++---- .../{resources/views => Accounts}/UserView.ts | 2 +- .../controllers.ts} | 15 +++++++------ .../{models/User.ts => Accounts/models.ts} | 0 api/src/Accounts/resources.ts | 22 +++++++++++++++++++ .../DBContext => Blog}/BlogPostRepo.ts | 6 ++--- api/src/{resources/views => Blog}/PostView.ts | 4 ++-- .../controllers.ts} | 9 +++++--- api/src/{models/Blog.ts => Blog/models.ts} | 2 +- .../{resources/Blog.ts => Blog/resources.ts} | 10 +++++---- api/src/{services => }/Events.ts | 0 .../HelloWorld.controllers.ts | 7 +++--- .../HelloWorld.ts => HelloWorld/resources.ts} | 7 +++--- .../controllers.ts} | 4 ++-- .../Operations.ts => Operations/resources.ts} | 7 +++--- api/src/{services => }/UserProfile.ts | 2 +- api/src/controllers.ts | 12 +++++----- api/src/lib/middleware/events.ts | 2 +- api/src/lib/routing.ts | 6 +---- api/src/resources.ts | 14 ++++++------ api/src/resources/Accounts.ts | 9 -------- api/src/resources/Users.ts | 17 -------------- api/src/resources/lib/req.ts | 2 +- api/src/resources/views.ts | 4 ---- api/src/router.ts | 2 +- api/src/services.ts | 6 ----- api/src/services/DBContext.ts | 4 ---- api/src/services/lib.ts | 7 ------ api/tsconfig.json | 13 +++++++++++ api/tsconfig.src.json | 13 +++++++++++ frontend/composables/client.ts | 2 +- frontend/composables/currentUser.ts | 2 +- frontend/nuxt.config.ts | 19 +++++++++++++--- frontend/pages/blog/[id].vue | 2 +- 37 files changed, 132 insertions(+), 132 deletions(-) delete mode 100644 api/src/Accounts.controllers.ts rename api/src/{services/DBContext => Accounts}/UserRepo.ts (96%) rename api/src/{resources/resolvers => Accounts}/UserResolver.ts (91%) rename api/src/{resources/views => Accounts}/UserView.ts (91%) rename api/src/{Users.controllers.ts => Accounts/controllers.ts} (56%) rename api/src/{models/User.ts => Accounts/models.ts} (100%) create mode 100644 api/src/Accounts/resources.ts rename api/src/{services/DBContext => Blog}/BlogPostRepo.ts (90%) rename api/src/{resources/views => Blog}/PostView.ts (81%) rename api/src/{Blog.controllers.ts => Blog/controllers.ts} (90%) rename api/src/{models/Blog.ts => Blog/models.ts} (94%) rename api/src/{resources/Blog.ts => Blog/resources.ts} (81%) rename api/src/{services => }/Events.ts (100%) rename api/src/{ => HelloWorld}/HelloWorld.controllers.ts (86%) rename api/src/{resources/HelloWorld.ts => HelloWorld/resources.ts} (72%) rename api/src/{Operations.controllers.ts => Operations/controllers.ts} (80%) rename api/src/{resources/Operations.ts => Operations/resources.ts} (95%) rename api/src/{services => }/UserProfile.ts (95%) delete mode 100644 api/src/resources/Accounts.ts delete mode 100644 api/src/resources/Users.ts delete mode 100644 api/src/resources/views.ts delete mode 100644 api/src/services.ts delete mode 100644 api/src/services/DBContext.ts delete mode 100644 api/src/services/lib.ts diff --git a/.vscode/model.code-snippets b/.vscode/model.code-snippets index be19411aa..cc144444d 100644 --- a/.vscode/model.code-snippets +++ b/.vscode/model.code-snippets @@ -8,7 +8,7 @@ "ResourceCodegen": { "prefix": "genrsc", "body": [ - "// codegen:start {preset: meta, sourcePrefix: src/resources/}" + "// codegen:start {preset: meta, sourcePrefix: src/}" ] }, "ModelComplete": { diff --git a/api/src/Accounts.controllers.ts b/api/src/Accounts.controllers.ts deleted file mode 100644 index 2baeb470f..000000000 --- a/api/src/Accounts.controllers.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { matchFor, Router } from "#api/lib/routing" -import { UserRepo } from "#api/services" -import { AccountsRsc } from "#resources" -import { Effect } from "effect-app" - -export default Router(AccountsRsc)({ - dependencies: [UserRepo.Default], - effect: Effect.gen(function*() { - const userRepo = yield* UserRepo - - return matchFor(AccountsRsc)({ - GetMe: userRepo.getCurrentUser - }) - }) -}) diff --git a/api/src/services/DBContext/UserRepo.ts b/api/src/Accounts/UserRepo.ts similarity index 96% rename from api/src/services/DBContext/UserRepo.ts rename to api/src/Accounts/UserRepo.ts index 6d0e36804..001d2020b 100644 --- a/api/src/services/DBContext/UserRepo.ts +++ b/api/src/Accounts/UserRepo.ts @@ -1,16 +1,16 @@ import { RepoConfig } from "#api/config" import { RepoDefault } from "#api/lib/layers" -import type { UserId } from "#models/User" -import { User } from "#models/User" import { Model } from "@effect-app/infra" import { NotFoundError, NotLoggedInError } from "@effect-app/infra/errors" +import { Q } from "@effect-app/infra/Model" import { generate } from "@effect-app/infra/test" import { Array, Effect, Exit, Layer, Option, pipe, Request, RequestResolver, S } from "effect-app" import { fakerArb } from "effect-app/faker" import { Email } from "effect-app/Schema" import fc from "fast-check" -import { Q } from "../lib.js" 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/resources/resolvers/UserResolver.ts b/api/src/Accounts/UserResolver.ts similarity index 91% rename from api/src/resources/resolvers/UserResolver.ts rename to api/src/Accounts/UserResolver.ts index 9d6ec15e8..c2d2558bf 100644 --- a/api/src/resources/resolvers/UserResolver.ts +++ b/api/src/Accounts/UserResolver.ts @@ -1,11 +1,11 @@ -import { UserId } from "#models/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 * as UsersRsc from "../Users.js" -import { UserView } from "../views/UserView.js" +import { UserId } from "./models.js" +import { AccountsRsc } from "./resources.js" +import { UserView } from "./UserView.js" interface GetUserViewById extends Request.Request> { readonly _tag: "GetUserViewById" @@ -15,7 +15,7 @@ const GetUserViewById = Request.tagged("GetUserViewById") const getUserViewByIdResolver = RequestResolver .makeBatched((requests: GetUserViewById[]) => - clientFor(UsersRsc).pipe( + clientFor(AccountsRsc).pipe( Effect.flatMap((client) => client .IndexUsers diff --git a/api/src/resources/views/UserView.ts b/api/src/Accounts/UserView.ts similarity index 91% rename from api/src/resources/views/UserView.ts rename to api/src/Accounts/UserView.ts index 928ac6e1b..666ebda07 100644 --- a/api/src/resources/views/UserView.ts +++ b/api/src/Accounts/UserView.ts @@ -1,5 +1,5 @@ -import { User } from "#models/User" import { S } from "#resources/lib" +import { User } from "./models.js" export class UserView extends S.ExtendedClass()({ ...User.pick("id", "role"), diff --git a/api/src/Users.controllers.ts b/api/src/Accounts/controllers.ts similarity index 56% rename from api/src/Users.controllers.ts rename to api/src/Accounts/controllers.ts index 7bc562689..f8203167b 100644 --- a/api/src/Users.controllers.ts +++ b/api/src/Accounts/controllers.ts @@ -1,16 +1,17 @@ import { matchFor, Router } from "#api/lib/routing" -import { Q, UserRepo } from "#api/services" -import { UsersRsc } from "#resources" -import type { UserView } from "#resources/views" -import { Array } from "effect" -import { Effect, Order } from "effect-app" +import { Q } from "@effect-app/infra/Model" +import { Array, Effect, Order } from "effect-app" +import { AccountsRsc } from "./resources.js" +import { UserRepo } from "./UserRepo.js" +import type { UserView } from "./UserView.js" -export default Router(UsersRsc)({ +export default Router(AccountsRsc)({ dependencies: [UserRepo.Default], effect: Effect.gen(function*() { const userRepo = yield* UserRepo - return matchFor(UsersRsc)({ + return matchFor(AccountsRsc)({ + GetMe: userRepo.getCurrentUser, IndexUsers: (req) => userRepo .query(Q.where("id", "in", req.filterByIds)) diff --git a/api/src/models/User.ts b/api/src/Accounts/models.ts similarity index 100% rename from api/src/models/User.ts rename to api/src/Accounts/models.ts diff --git a/api/src/Accounts/resources.ts b/api/src/Accounts/resources.ts new file mode 100644 index 000000000..c1f66f888 --- /dev/null +++ b/api/src/Accounts/resources.ts @@ -0,0 +1,22 @@ +import { S } from "#resources/lib" +import { NotFoundError } from "effect-app/client" +import { User, UserId } from "./models.js" +import { UserView } from "./UserView.js" + +export class GetMe extends S.Req()("GetMe", {}, { success: User, failure: NotFoundError }) {} + +export class IndexUsers extends S.Req()("IndexUsers", { + filterByIds: S.NonEmptyArray(UserId) +}, { + allowAnonymous: true, + allowRoles: ["user"], + success: S.Struct({ + users: S.Array(UserView) + }) +}) {} + +// codegen:start {preset: meta, sourcePrefix: src/} +export const meta = { moduleName: "Accounts" } as const +// codegen:end + +export * as AccountsRsc from "./resources.js" diff --git a/api/src/services/DBContext/BlogPostRepo.ts b/api/src/Blog/BlogPostRepo.ts similarity index 90% rename from api/src/services/DBContext/BlogPostRepo.ts rename to api/src/Blog/BlogPostRepo.ts index 36d97a1f5..737887656 100644 --- a/api/src/services/DBContext/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 "#models/Blog" -import { UserFromIdResolver } from "#models/User" import { Model } from "@effect-app/infra" import { Effect } from "effect" import { Context } from "effect-app" import { NonEmptyString255, NonEmptyString2k } from "effect-app/Schema" -import { UserRepo } from "./UserRepo.js" +import { BlogPost } from "./models.js" export type BlogPostSeed = "sample" | "" diff --git a/api/src/resources/views/PostView.ts b/api/src/Blog/PostView.ts similarity index 81% rename from api/src/resources/views/PostView.ts rename to api/src/Blog/PostView.ts index 7aa56a9c9..45a4f2657 100644 --- a/api/src/resources/views/PostView.ts +++ b/api/src/Blog/PostView.ts @@ -1,6 +1,6 @@ -import { BlogPost } from "#models/Blog" +import { UserViewFromId } from "#api/Accounts/UserResolver" import { S } from "#resources/lib" -import { UserViewFromId } from "../resolvers/UserResolver.js" +import { BlogPost } from "./models.js" export class BlogPostView extends S.ExtendedClass()({ ...BlogPost.omit("author"), diff --git a/api/src/Blog.controllers.ts b/api/src/Blog/controllers.ts similarity index 90% rename from api/src/Blog.controllers.ts rename to api/src/Blog/controllers.ts index 7218316fc..ea310bc40 100644 --- a/api/src/Blog.controllers.ts +++ b/api/src/Blog/controllers.ts @@ -1,12 +1,15 @@ +import { UserRepo } from "#api/Accounts/UserRepo" +import { Events } from "#api/Events" import { matchFor, Router } from "#api/lib/routing" -import { BlogPostRepo, Events, Operations, UserRepo } from "#api/services" -import { BlogPost } from "#models/Blog" import { BlogRsc } from "#resources" import { BogusEvent } from "#resources/Events" +import { Operations } from "@effect-app/infra/Operations" import { Duration, Effect, Schedule } from "effect" import { Option } from "effect-app" import { NonEmptyString2k, NonNegativeInt } from "effect-app/Schema" -import { OperationsDefault } from "./lib/layers.js" +import { OperationsDefault } from "../lib/layers.js" +import { BlogPostRepo } from "./BlogPostRepo.js" +import { BlogPost } from "./models.js" export default Router(BlogRsc)({ dependencies: [ diff --git a/api/src/models/Blog.ts b/api/src/Blog/models.ts similarity index 94% rename from api/src/models/Blog.ts rename to api/src/Blog/models.ts index ffb31e216..60f854358 100644 --- a/api/src/models/Blog.ts +++ b/api/src/Blog/models.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/resources/Blog.ts b/api/src/Blog/resources.ts similarity index 81% rename from api/src/resources/Blog.ts rename to api/src/Blog/resources.ts index 843cba4a4..d0538bb24 100644 --- a/api/src/resources/Blog.ts +++ b/api/src/Blog/resources.ts @@ -1,8 +1,8 @@ -import { BlogPost, BlogPostId } from "#models/Blog" +import { S } from "#resources/lib" import { InvalidStateError, NotFoundError, OptimisticConcurrencyException } from "effect-app/client" import { OperationId } from "effect-app/Operations" -import { S } from "./lib.js" -import { BlogPostView } from "./views.js" +import { BlogPost, BlogPostId } from "./models.js" +import { BlogPostView } from "./PostView.js" export class CreatePost extends S.Req()("CreatePost", BlogPost.pick("title", "body"), { allowRoles: ["user"], @@ -26,6 +26,8 @@ export class PublishPost extends S.Req()("PublishPost", { id: BlogPostId }, { allowRoles: ["user"], success: OperationId, failure: S.Union(NotFoundError) }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "Blog" } as const // codegen:end + +export * as BlogRsc from "./resources.js" diff --git a/api/src/services/Events.ts b/api/src/Events.ts similarity index 100% rename from api/src/services/Events.ts rename to api/src/Events.ts diff --git a/api/src/HelloWorld.controllers.ts b/api/src/HelloWorld/HelloWorld.controllers.ts similarity index 86% rename from api/src/HelloWorld.controllers.ts rename to api/src/HelloWorld/HelloWorld.controllers.ts index 132b9b96a..f7f01ec28 100644 --- a/api/src/HelloWorld.controllers.ts +++ b/api/src/HelloWorld/HelloWorld.controllers.ts @@ -1,11 +1,10 @@ +import { User } from "#api/Accounts/models" +import { UserRepo } from "#api/Accounts/UserRepo" import { matchFor, Router } from "#api/lib/routing" -import { UserRepo } from "#api/services" -import { User } from "#models/User" -import { HelloWorldRsc } from "#resources" -import { GetHelloWorld } from "#resources/HelloWorld" import { getRequestContext } from "@effect-app/infra/api/setupRequest" import { generate } from "@effect-app/infra/test" import { Effect, S } from "effect-app" +import { GetHelloWorld, HelloWorldRsc } from "./resources.js" export default Router(HelloWorldRsc)({ dependencies: [UserRepo.Default], diff --git a/api/src/resources/HelloWorld.ts b/api/src/HelloWorld/resources.ts similarity index 72% rename from api/src/resources/HelloWorld.ts rename to api/src/HelloWorld/resources.ts index 3f5cb5211..4d2807120 100644 --- a/api/src/resources/HelloWorld.ts +++ b/api/src/HelloWorld/resources.ts @@ -1,6 +1,6 @@ +import { UserView } from "#api/Accounts/UserView" +import { S } from "#resources/lib" import { RequestContext } from "@effect-app/infra/RequestContext" -import { S } from "./lib.js" -import { UserView } from "./views.js" class Response extends S.Class()({ now: S.Date.withDefault, @@ -14,6 +14,7 @@ export class GetHelloWorld extends S.Req()("GetHelloWorld", { echo: S.String }, { allowAnonymous: true, allowRoles: ["user"], success: Response }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "HelloWorld" } as const // codegen:end +export * as HelloWorldRsc from "./resources.js" diff --git a/api/src/Operations.controllers.ts b/api/src/Operations/controllers.ts similarity index 80% rename from api/src/Operations.controllers.ts rename to api/src/Operations/controllers.ts index 4a22c15f9..669ba1d03 100644 --- a/api/src/Operations.controllers.ts +++ b/api/src/Operations/controllers.ts @@ -1,8 +1,8 @@ +import { OperationsDefault } from "#api/lib/layers" import { matchFor, Router } from "#api/lib/routing" -import { Operations } from "#api/services" import { OperationsRsc } from "#resources" +import { Operations } from "@effect-app/infra/Operations" import { Effect } from "effect-app" -import { OperationsDefault } from "./lib/layers.js" export default Router(OperationsRsc)({ dependencies: [OperationsDefault], diff --git a/api/src/resources/Operations.ts b/api/src/Operations/resources.ts similarity index 95% rename from api/src/resources/Operations.ts rename to api/src/Operations/resources.ts index 0b38c13d5..9f469c6e9 100644 --- a/api/src/resources/Operations.ts +++ b/api/src/Operations/resources.ts @@ -1,14 +1,13 @@ +import { clientFor, S } from "#api/resources/lib" import { Duration, Effect } from "effect-app" import { NotFoundError } from "effect-app/client" import { Operation, OperationFailure, OperationId } from "effect-app/Operations" -import { clientFor } from "./lib.js" -import * as S from "./lib/schema.js" export class FindOperation extends S.Req()("FindOperation", { id: OperationId }, { allowAnonymous: true, allowRoles: ["user"], success: S.NullOr(Operation) }) {} -// codegen:start {preset: meta, sourcePrefix: src/resources/} +// codegen:start {preset: meta, sourcePrefix: src/} export const meta = { moduleName: "Operations" } as const // codegen:end @@ -96,3 +95,5 @@ export const OperationsClient = Effect.gen(function*() { waitForOperation_ }) }) + +export * as OperationsRsc from "./resources.js" diff --git a/api/src/services/UserProfile.ts b/api/src/UserProfile.ts similarity index 95% rename from api/src/services/UserProfile.ts rename to api/src/UserProfile.ts index 18ae6a117..176b9e2bb 100644 --- a/api/src/services/UserProfile.ts +++ b/api/src/UserProfile.ts @@ -1,7 +1,7 @@ -import { Role } from "#models/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/controllers.ts b/api/src/controllers.ts index 0d5106915..9207e5d00 100644 --- a/api/src/controllers.ts +++ b/api/src/controllers.ts @@ -1,9 +1,7 @@ -// codegen:start {preset: barrel, include: ./*.controllers.ts, import: default} -import accountsControllers from "./Accounts.controllers.js" -import blogControllers from "./Blog.controllers.js" -import helloWorldControllers from "./HelloWorld.controllers.js" -import operationsControllers from "./Operations.controllers.js" -import usersControllers from "./Users.controllers.js" +// codegen:start {preset: barrel, include: ./*/controllers.ts, import: default} +import accountsControllers from "./Accounts/controllers.js" +import blogControllers from "./Blog/controllers.js" +import operationsControllers from "./Operations/controllers.js" -export { accountsControllers, blogControllers, helloWorldControllers, operationsControllers, usersControllers } +export { accountsControllers, blogControllers, operationsControllers } // codegen:end diff --git a/api/src/lib/middleware/events.ts b/api/src/lib/middleware/events.ts index 2b4544991..39709902a 100644 --- a/api/src/lib/middleware/events.ts +++ b/api/src/lib/middleware/events.ts @@ -1,4 +1,4 @@ -import { Events } from "#api/services" +import { Events } from "#api/Events" import { ClientEvents } from "#resources" import { makeSSE } from "@effect-app/infra/api/middlewares" import { Effect } from "effect-app" diff --git a/api/src/lib/routing.ts b/api/src/lib/routing.ts index 13ecb4a8f..f0a1c7ca2 100644 --- a/api/src/lib/routing.ts +++ b/api/src/lib/routing.ts @@ -13,11 +13,7 @@ import { Context, Effect, Exit, Layer, Option } from "effect-app" import type { GetEffectContext, RPCContextMap } from "effect-app/client" import type { HttpHeaders, HttpServerRequest } from "effect-app/http" import type * as EffectRequest from "effect/Request" -import { - makeUserProfileFromAuthorizationHeader, - makeUserProfileFromUserHeader, - UserProfile -} from "../services/UserProfile.js" +import { makeUserProfileFromAuthorizationHeader, makeUserProfileFromUserHeader, UserProfile } from "../UserProfile.js" import { basicRuntime } from "./basicRuntime.js" export interface CTX { diff --git a/api/src/resources.ts b/api/src/resources.ts index 4faf9961a..dc7b365b5 100644 --- a/api/src/resources.ts +++ b/api/src/resources.ts @@ -2,10 +2,10 @@ import type {} from "@effect/platform/HttpClient" export { ClientEvents } from "./resources/Events.js" -// codegen:start {preset: barrel, include: ./resources/*.ts, exclude: [./resources/index.ts, ./resources/lib.ts, ./resources/integrationEvents.ts, ./resources/Messages.ts, ./resources/views.ts, ./resources/Events.ts], export: { as: 'PascalCase', postfix: 'Rsc' }} -export * as AccountsRsc from "./resources/Accounts.js" -export * as BlogRsc from "./resources/Blog.js" -export * as HelloWorldRsc from "./resources/HelloWorld.js" -export * as OperationsRsc from "./resources/Operations.js" -export * as UsersRsc from "./resources/Users.js" -// codegen:end +// TODO +//// codegen:start {preset: barrel, include: ./*/resources.ts, export: { as: 'PascalCase', postfix: 'Rsc' }} +export { AccountsRsc } from "./Accounts/resources.js" +export { BlogRsc } from "./Blog/resources.js" +export { HelloWorldRsc } from "./HelloWorld/resources.js" +export { OperationsRsc } from "./Operations/resources.js" +//// codegen:end diff --git a/api/src/resources/Accounts.ts b/api/src/resources/Accounts.ts deleted file mode 100644 index 80068cafb..000000000 --- a/api/src/resources/Accounts.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { User } from "#models/User" -import { NotFoundError } from "effect-app/client" -import { S } from "./lib.js" - -export class GetMe extends S.Req()("GetMe", {}, { success: User, failure: NotFoundError }) {} - -// codegen:start {preset: meta, sourcePrefix: src/resources/} -export const meta = { moduleName: "Accounts" } as const -// codegen:end diff --git a/api/src/resources/Users.ts b/api/src/resources/Users.ts deleted file mode 100644 index c73252369..000000000 --- a/api/src/resources/Users.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UserId } from "#models/User" -import { S } from "./lib.js" -import { UserView } from "./views/UserView.js" - -export class IndexUsers extends S.Req()("IndexUsers", { - filterByIds: S.NonEmptyArray(UserId) -}, { - allowAnonymous: true, - allowRoles: ["user"], - success: S.Struct({ - users: S.Array(UserView) - }) -}) {} - -// codegen:start {preset: meta, sourcePrefix: src/resources/} -export const meta = { moduleName: "Users" } as const -// codegen:end diff --git a/api/src/resources/lib/req.ts b/api/src/resources/lib/req.ts index 5e2e2ae4a..bbd41f144 100644 --- a/api/src/resources/lib/req.ts +++ b/api/src/resources/lib/req.ts @@ -1,4 +1,4 @@ -import type { Role } from "#models/User" +import type { Role } from "#api/Accounts/models" 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/src/resources/views.ts b/api/src/resources/views.ts deleted file mode 100644 index b09859be2..000000000 --- a/api/src/resources/views.ts +++ /dev/null @@ -1,4 +0,0 @@ -// codegen:start {preset: barrel, include: ./views/*.ts} -export * from "./views/PostView.js" -export * from "./views/UserView.js" -// codegen:end diff --git a/api/src/router.ts b/api/src/router.ts index 9aedfeca7..717f6a4ed 100644 --- a/api/src/router.ts +++ b/api/src/router.ts @@ -3,7 +3,7 @@ import * as MW from "#api/lib/middleware" import { Console, Effect, Layer } from "effect-app" import { HttpMiddleware, HttpRouter, HttpServer } from "effect-app/http" import { BaseConfig, MergedConfig } from "./config.js" -import { Events } from "./services.js" +import { Events } from "./Events.js" class RootAppRouter extends HttpRouter.Tag("RootAppRouter")() {} const AllRoutes = RootAppRouter diff --git a/api/src/services.ts b/api/src/services.ts deleted file mode 100644 index eb74b1bc2..000000000 --- a/api/src/services.ts +++ /dev/null @@ -1,6 +0,0 @@ -// codegen:start {preset: barrel, include: services/*.ts } -export * from "./services/DBContext.js" -export * from "./services/Events.js" -export * from "./services/lib.js" -export * from "./services/UserProfile.js" -// codegen:end diff --git a/api/src/services/DBContext.ts b/api/src/services/DBContext.ts deleted file mode 100644 index f3dec88d7..000000000 --- a/api/src/services/DBContext.ts +++ /dev/null @@ -1,4 +0,0 @@ -// codegen:start {preset: barrel, include: ./DBContext/* } -export * from "./DBContext/BlogPostRepo.js" -export * from "./DBContext/UserRepo.js" -// codegen:end diff --git a/api/src/services/lib.ts b/api/src/services/lib.ts deleted file mode 100644 index 651a62991..000000000 --- a/api/src/services/lib.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "@effect-app/infra/adapters/memQueue" -export * from "@effect-app/infra/adapters/ServiceBus" -export * from "@effect-app/infra/Emailer" -export * from "@effect-app/infra/Operations" -export * from "@effect-app/infra/Store/index" - -export { Q } from "@effect-app/infra/Model" diff --git a/api/tsconfig.json b/api/tsconfig.json index 534c4c0a4..a7e783274 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -1,6 +1,19 @@ { "compilerOptions": { "paths": { + // TODO: auto gen + "#Blog/*": [ + "./src/Blog/*.js" + ], + "#Operations/*": [ + "./src/Operations/*.js" + ], + "#Accounts/*": [ + "./src/Accounts/*.js" + ], + "#HelloWorld/*": [ + "./src/HelloWorld/*.js" + ], "#core/*": [ "./src/core/*.js" ], diff --git a/api/tsconfig.src.json b/api/tsconfig.src.json index 8b9e290cd..7af8e8cbf 100644 --- a/api/tsconfig.src.json +++ b/api/tsconfig.src.json @@ -14,6 +14,19 @@ "#core/*": [ "./src/core/*.js" ], + // TODO: auto gen + "#Blog/*": [ + "./src/Blog/*.js" + ], + "#Operations/*": [ + "./src/Operations/*.js" + ], + "#Accounts/*": [ + "./src/Accounts/*.js" + ], + "#HelloWorld/*": [ + "./src/HelloWorld/*.js" + ], "#resources": [ "./src/resources.js" ], diff --git a/frontend/composables/client.ts b/frontend/composables/client.ts index 1750ca11a..684864c8c 100644 --- a/frontend/composables/client.ts +++ b/frontend/composables/client.ts @@ -5,7 +5,7 @@ import { runtime, type RT } from "~/plugins/runtime" import type { Effect } from "effect-app" import { clientFor as clientFor_ } from "#resources/lib" import type { Requests } from "effect-app/client" -import { OperationsClient } from "#resources/Operations" +import { OperationsClient } from "#Operations/resources" export { useToast } from "vue-toastification" diff --git a/frontend/composables/currentUser.ts b/frontend/composables/currentUser.ts index 651474d4e..662428dae 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 "#models/User" +import type { UserId } from "#Accounts/models" export function getUserId() { return useCookie("user-id") diff --git a/frontend/nuxt.config.ts b/frontend/nuxt.config.ts index 921a92b54..c2ccb87f7 100644 --- a/frontend/nuxt.config.ts +++ b/frontend/nuxt.config.ts @@ -24,10 +24,23 @@ export default defineNuxtConfig({ }, alias: { - "#resources": fileURLToPath( - new URL("../api/src/resources", import.meta.url), + ...[ + // TODO: auto gen + "Accounts", + "Blog", + "Operations", + "HelloWorld", + "resources", + "models", + ].reduce( + (prev, cur) => { + prev[`#${cur}`] = fileURLToPath( + new URL("../api/src/" + cur, import.meta.url), + ) + return prev + }, + {} as Record, ), - "#models": fileURLToPath(new URL("../api/src/models", import.meta.url)), ...(localLibs ? { "effect-app": fileURLToPath( diff --git a/frontend/pages/blog/[id].vue b/frontend/pages/blog/[id].vue index 8205b2010..17b882ba0 100644 --- a/frontend/pages/blog/[id].vue +++ b/frontend/pages/blog/[id].vue @@ -1,7 +1,7 @@