Skip to content

Commit

Permalink
refactor(domain): publish the domain package as a nestjs module
Browse files Browse the repository at this point in the history
  • Loading branch information
tericcabrel committed Jun 3, 2024
1 parent 7d6b597 commit f6c7d73
Show file tree
Hide file tree
Showing 81 changed files with 2,004 additions and 1,760 deletions.
1 change: 1 addition & 0 deletions apps/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"@nestjs/config": "3.2.2",
"@nestjs/core": "10.3.8",
"@nestjs/platform-express": "10.3.8",
"@prisma/client": "5.14.0",
"reflect-metadata": "0.2.2",
"rxjs": "7.8.1",
"zod": "3.23.8"
Expand Down
2 changes: 1 addition & 1 deletion apps/backend/src/app.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export class AppController {
constructor(private readonly appService: AppService) {}

@Get()
getHello(): string {
async getHello(): Promise<string> {
return this.appService.getHello();
}
}
22 changes: 18 additions & 4 deletions apps/backend/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { Logger, Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { DomainModule } from '@snipcode/domain';

import { AppController } from './app.controller';
import { AppService } from './app.service';
import appConfig, { validate } from './configs/environment';
import appConfig, { EnvironmentVariables, validate } from './configs/environment';

@Module({
controllers: [AppController],
Expand All @@ -14,7 +15,20 @@ import appConfig, { validate } from './configs/environment';
load: [appConfig],
validate,
}),
DomainModule.forRootAsync({
inject: [ConfigService],
isGlobal: true,
useFactory: (configService: ConfigService<EnvironmentVariables, true>) => {
return {
convertKit: {
apiKey: '',
formId: '',
},
databaseUrl: configService.get('DATABASE_URL'),
};
},
}),
],
providers: [AppService],
providers: [Logger, AppService],
})
export class AppModule {}
19 changes: 17 additions & 2 deletions apps/backend/src/app.service.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,23 @@
import { Injectable } from '@nestjs/common';
import { Injectable, Logger } from '@nestjs/common';
import { RoleService, UserService } from '@snipcode/domain';

@Injectable()
export class AppService {
getHello(): string {
constructor(
private readonly roleService: RoleService,
private readonly userService: UserService,
private logger: Logger,
) {}

async getHello(): Promise<string> {
const users = await this.userService.findByEmail('[email protected]');

this.logger.log(users);

const roles = await this.roleService.findAll();

this.logger.log(roles);

return 'Hello World!';
}
}
2 changes: 2 additions & 0 deletions apps/backend/src/configs/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ import { registerAs } from '@nestjs/config';
import { z } from 'zod';

export default registerAs('app', () => ({
databaseUrl: process.env.DATABASE_URL,
env: process.env.NODE_ENV,
host: process.env.HOST,
port: parseInt(process.env.PORT ?? '7501', 10),
}));

const EnvironmentVariablesSchema = z.object({
DATABASE_URL: z.string(),
HOST: z.string(),
NODE_ENV: z.union([z.literal('development'), z.literal('production'), z.literal('test')]),
PORT: z.number({ coerce: true }).min(7000).max(8000),
Expand Down
7 changes: 7 additions & 0 deletions apps/backend/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ const bootstrap = async () => {

await app.listen(port, () => {
logger.log(`Server ready at ${host}:${port}`);
const object = {
age: 23,
birthDate: new Date(),
name: 'marion',
};

logger.log(object);
// logger.log(`Server ready at ${host}:${port}${graphqlServer.graphqlPath}`);
});
};
Expand Down
2 changes: 1 addition & 1 deletion apps/backend/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"path": "../../packages/utils"
},
{
"path": "../../packages/logger"
"path": "../../packages/logger-old"
}
]
}
2 changes: 1 addition & 1 deletion apps/core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ These packages are located in the folder `packages`, so you might need to change
Here are the packages used in this project:

* [@snipcode/domain](../../packages/domain)
* [@snipcode/logger](../../packages/logger)
* [@snipcode/logger](../../packages/logger-old)
* [@snipcode/utils](../../packages/utils)

## Set up the project
Expand Down
2 changes: 1 addition & 1 deletion apps/core/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"path": "../../packages/utils"
},
{
"path": "../../packages/logger"
"path": "../../packages/logger-old"
},
{
"path": "../../packages/domain"
Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
"cache:login": "turbo login",
"cache:link": "turbo link",
"cache:disable": "turbo unlink",
"prerelease": "changeset",
"branch:create": "pscale branch create core-db $(git rev-parse --abbrev-ref HEAD)"
"prerelease": "changeset"
},
"workspaces": [
"packages/domain",
Expand Down
11 changes: 11 additions & 0 deletions packages/domain/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = {
root: true,
extends: '../../.eslintrc.json',
ignorePatterns: ['dist', '.eslintrc.js'],
parserOptions: {
ecmaVersion: 2023,
sourceType: 'module',
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
},
};
12 changes: 0 additions & 12 deletions packages/domain/.eslintrc.json

This file was deleted.

67 changes: 14 additions & 53 deletions packages/domain/index.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,14 @@
import { Folder } from './src/entities/folder';
import { Role, RoleName } from './src/entities/role';
import { Session } from './src/entities/session';
import { Snippet, SnippetVisibility } from './src/entities/snippet';
import { OauthProvider, User } from './src/entities/user';
import { CreateFolderDto } from './src/folders/dtos/create-folder-dto';
import { CreateUserRootFolderDto } from './src/folders/dtos/create-user-root-folder-dto';
import { UpdateFolderDto } from './src/folders/dtos/update-folder-dto';
import { FolderService } from './src/folders/folder.service';
import { NewsletterService } from './src/newsletters/newsletter.service';
import { CreateRoleDto } from './src/roles/dtos/create-role-dto';
import { RoleService } from './src/roles/role.service';
import { CreateSessionDto } from './src/sessions/dtos/create-session-dto';
import { SessionService } from './src/sessions/session.service';
import { CreateSnippetDto } from './src/snippets/dtos/create-snippet-dto';
import { DeleteSnippetDto } from './src/snippets/dtos/delete-snippet-dto';
import { UpdateSnippetDto } from './src/snippets/dtos/update-snippet-dto';
import { SnippetService } from './src/snippets/snippet.service';
import { CreateUserDto } from './src/users/dtos/create-user-dto';
import { UpdateUserDto } from './src/users/dtos/update-user-dto';
import { UserService } from './src/users/user.service';
import { dbID } from './src/utils/id';

export { dbID };
export { PrismaClient, prisma as dbClient } from './src/utils/prisma';
export type { Role, RoleName, User, OauthProvider, Folder, Session, Snippet, SnippetVisibility };

const roleService = new RoleService();
const userService = new UserService();
const folderService = new FolderService();
const snippetService = new SnippetService();
const sessionService = new SessionService();

export {
folderService,
roleService,
sessionService,
snippetService,
userService,
CreateRoleDto,
CreateSessionDto,
CreateUserDto,
DeleteSnippetDto,
UpdateUserDto,
CreateFolderDto,
CreateSnippetDto,
CreateUserRootFolderDto,
NewsletterService,
UpdateSnippetDto,
UpdateFolderDto,
};

export type { RoleService, UserService, FolderService, SessionService, SnippetService };
export { DomainModule } from './src/domain.module';
export { PrismaService } from './src/prisma.service';
export { UserService } from './src/services/users/user.service';
export { RoleService } from './src/services/roles/role.service';
export { FolderService } from './src/services/folders/folder.service';
export { SnippetService } from './src/services/snippets/snippet.service';
export { SessionService } from './src/services/sessions/session.service';
export { NewsletterService } from './src/services/newsletters/newsletter.service';
export { Folder } from './src/services/folders/folder.entity';
export { Role, RoleName } from './src/services/roles/role.entity';
export { Session } from './src/services/sessions/session.entity';
export { Snippet, SnippetVisibility } from './src/services/snippets/snippet.entity';
export { OauthProvider, User } from './src/services/users/user.entity';
export { dbID } from './src/utils/db-id';
24 changes: 13 additions & 11 deletions packages/domain/jest.config.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
import type { Config } from '@jest/types';

const config: Config.InitialOptions = {
roots: ['.'],
preset: 'ts-jest',
testMatch: ['**/?(*.)+(spec|test).[jt]s'],
testEnvironment: 'node',
clearMocks: true,
maxWorkers: 1,
snapshotFormat: {
printBasicPrototype: false,
},
coverageDirectory: 'coverage',
collectCoverage: false, // When set to true, coverage is performed even if coverage flag isn't provided
collectCoverage: false,
// When set to true, coverage is performed even if coverage flag isn't provided
collectCoverageFrom: ['src/**/*.ts', '!src/index.ts'],
coverageDirectory: 'coverage',
coverageReporters: ['json', 'lcov', 'text', 'text-summary'],
coverageThreshold: {
global: {
branches: 40,
Expand All @@ -21,7 +15,15 @@ const config: Config.InitialOptions = {
statements: 60,
},
},
coverageReporters: ['json', 'lcov', 'text', 'text-summary'],
maxWorkers: 1,
preset: 'ts-jest',
roots: ['.'],
snapshotFormat: {
printBasicPrototype: false,
},
testEnvironment: 'node',
testMatch: ['**/?(*.)+(spec|test).[jt]s'],
testPathIgnorePatterns: ['dist'],
};

export default config;
6 changes: 4 additions & 2 deletions packages/domain/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"license": "MIT",
"scripts": {
"build": "tsc --project tsconfig.prod.json",
"clean": "rm -rf .turbo dist",
"clean": "rm -rf .turbo dist coverage",
"lint": "eslint --fix",
"db:dev:create": "pscale branch create core-db $(git rev-parse --abbrev-ref HEAD)",
"db:dev:connect": "pscale connect core-db $(git rev-parse --abbrev-ref HEAD) --port 3311",
Expand All @@ -29,11 +29,13 @@
"@bugsnag/cuid": "3.1.1",
"@prisma/client": "5.14.0",
"@snipcode/utils": "workspace:*",
"axios": "1.6.8",
"axios": "1.7.2",
"bcryptjs": "2.4.3",
"unique-username-generator": "1.3.0"
},
"devDependencies": {
"@nestjs/common": "10.3.8",
"@nestjs/testing": "10.3.8",
"@ngneat/falso": "7.2.0",
"@types/bcryptjs": "2.4.6",
"nock": "13.5.4",
Expand Down
1 change: 1 addition & 0 deletions packages/domain/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const DOMAIN_SERVICES_OPTIONS = 'DOMAIN_SERVICES_OPTIONS';

0 comments on commit f6c7d73

Please sign in to comment.