Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
modsyan committed May 31, 2024
2 parents 5a490b6 + 674c1cc commit 8252d23
Show file tree
Hide file tree
Showing 56 changed files with 984 additions and 498 deletions.
178 changes: 89 additions & 89 deletions client/src/app/[locale]/(unauth)/api/guestbook/route.ts
Original file line number Diff line number Diff line change
@@ -1,89 +1,89 @@
import { eq, sql } from 'drizzle-orm';
import { NextResponse } from 'next/server';

import { db } from '@/libs/DB';
import { logger } from '@/libs/Logger';
import { guestbookSchema } from '@/models/Schema';
import {
DeleteGuestbookValidation,
EditGuestbookValidation,
GuestbookValidation,
} from '@/validations/GuestbookValidation';

export const POST = async (request: Request) => {
const json = await request.json();
const parse = GuestbookValidation.safeParse(json);

if (!parse.success) {
return NextResponse.json(parse.error.format(), { status: 422 });
}

try {
const guestbook = await db
.insert(guestbookSchema)
.values(parse.data)
.returning();

logger.info('A new guestbook has been created');

return NextResponse.json({
id: guestbook[0]?.id,
});
} catch (error) {
logger.error(error, 'An error occurred while creating a guestbook');

return NextResponse.json({}, { status: 500 });
}
};

export const PUT = async (request: Request) => {
const json = await request.json();
const parse = EditGuestbookValidation.safeParse(json);

if (!parse.success) {
return NextResponse.json(parse.error.format(), { status: 422 });
}

try {
await db
.update(guestbookSchema)
.set({
...parse.data,
updatedAt: sql`(strftime('%s', 'now'))`,
})
.where(eq(guestbookSchema.id, parse.data.id))
.run();

logger.info('A guestbook entry has been updated');

return NextResponse.json({});
} catch (error) {
logger.error(error, 'An error occurred while updating a guestbook');

return NextResponse.json({}, { status: 500 });
}
};

export const DELETE = async (request: Request) => {
const json = await request.json();
const parse = DeleteGuestbookValidation.safeParse(json);

if (!parse.success) {
return NextResponse.json(parse.error.format(), { status: 422 });
}

try {
await db
.delete(guestbookSchema)
.where(eq(guestbookSchema.id, parse.data.id))
.run();

logger.info('A guestbook entry has been deleted');

return NextResponse.json({});
} catch (error) {
logger.error(error, 'An error occurred while deleting a guestbook');

return NextResponse.json({}, { status: 500 });
}
};
// import { eq, sql } from 'drizzle-orm';
// import { NextResponse } from 'next/server';

// import { db } from '@/libs/DB';
// import { logger } from '@/libs/Logger';
// import { guestbookSchema } from '@/models/Schema';
// import {
// DeleteGuestbookValidation,
// EditGuestbookValidation,
// GuestbookValidation,
// } from '@/validations/GuestbookValidation';

// export const POST = async (request: Request) => {
// const json = await request.json();
// const parse = GuestbookValidation.safeParse(json);

// if (!parse.success) {
// return NextResponse.json(parse.error.format(), { status: 422 });
// }

// try {
// const guestbook = await db
// .insert(guestbookSchema)
// .values(parse.data)
// .returning();

// logger.info('A new guestbook has been created');

// return NextResponse.json({
// id: guestbook[0]?.id,
// });
// } catch (error) {
// logger.error(error, 'An error occurred while creating a guestbook');

// return NextResponse.json({}, { status: 500 });
// }
// };

// export const PUT = async (request: Request) => {
// const json = await request.json();
// const parse = EditGuestbookValidation.safeParse(json);

// if (!parse.success) {
// return NextResponse.json(parse.error.format(), { status: 422 });
// }

// try {
// await db
// .update(guestbookSchema)
// .set({
// ...parse.data,
// updatedAt: sql`(strftime('%s', 'now'))`,
// })
// .where(eq(guestbookSchema.id, parse.data.id))
// .run();

// logger.info('A guestbook entry has been updated');

// return NextResponse.json({});
// } catch (error) {
// logger.error(error, 'An error occurred while updating a guestbook');

// return NextResponse.json({}, { status: 500 });
// }
// };

// export const DELETE = async (request: Request) => {
// const json = await request.json();
// const parse = DeleteGuestbookValidation.safeParse(json);

// if (!parse.success) {
// return NextResponse.json(parse.error.format(), { status: 422 });
// }

// try {
// await db
// .delete(guestbookSchema)
// .where(eq(guestbookSchema.id, parse.data.id))
// .run();

// logger.info('A guestbook entry has been deleted');

// return NextResponse.json({});
// } catch (error) {
// logger.error(error, 'An error occurred while deleting a guestbook');

// return NextResponse.json({}, { status: 500 });
// }
// };
18 changes: 9 additions & 9 deletions client/src/models/Schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import { sql } from 'drizzle-orm';
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';

export const guestbookSchema = sqliteTable('guestbook', {
id: integer('id').primaryKey(),
username: text('username').notNull(),
body: text('body').notNull(),
createdAt: integer('created_at', { mode: 'timestamp' }).default(
sql`(strftime('%s', 'now'))`,
),
updatedAt: integer('updated_at', { mode: 'timestamp' }).default(
sql`(strftime('%s', 'now'))`,
),
id: integer('id').primaryKey(),
username: text('username').notNull(),
body: text('body').notNull(),
createdAt: integer('created_at', { mode: 'timestamp' }).default(
sql`(strftime('%s', 'now'))`,
),
updatedAt: integer('updated_at', { mode: 'timestamp' }).default(
sql`(strftime('%s', 'now'))`,
),
});
Binary file modified server/db.sqlite3
Binary file not shown.
10 changes: 7 additions & 3 deletions server/src/application/auth/login/login.use-case.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { AuthRequest, AuthResponseDto } from '@contracts/dtos/auth';
import { UnauthorizedError } from '@contracts/errors/unauthorized.error';
import { IHasherService } from '@contracts/services/IHasher';
import { IJwtService } from '@contracts/services/IJwt';
import { IJwtService, JwtPayload } from '@contracts/services/IJwt';
import { TYPES } from '@infrastructure/shared/ioc/types';
import { inject, injectable } from 'inversify';
import { BaseUseCase } from '@application/shared';
import { IUserRepository } from '@domain/repositories/user.repository';
import { log } from 'console';
@injectable()
class LoginUseCase extends BaseUseCase<AuthRequest, AuthResponseDto> {
constructor(
Expand All @@ -25,11 +26,14 @@ class LoginUseCase extends BaseUseCase<AuthRequest, AuthResponseDto> {
) {
throw new UnauthorizedError('Invalid credentials');
}
const token = this._jwtService.sign(user.id!);
if (!user) {
throw new UnauthorizedError('User not found');
}
const token = this._jwtService.sign({ userId: user.id as string });
const result: AuthResponseDto = {
token,
tokenExpiration: new Date(Date.now() + 1000 * 60 * 60),
refreshToken: this._jwtService.sign(user.id!),
refreshToken: this._jwtService.sign({ userId: user.id as string }),
refreshTokenExpiration: new Date(Date.now() + 1000 * 60 * 60 * 24),
userDetails: user,
};
Expand Down
4 changes: 2 additions & 2 deletions server/src/application/auth/register/register.use-case.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ class RegisterUsecase extends BaseUseCase<CreateUserDto, AuthResponseDto> {
const createdUser = await this._userRepository.saveUser(user);
log('createdUser', createdUser);
const result: AuthResponseDto = {
token: this._jwtService.sign(createdUser.id!),
token: this._jwtService.sign({ userId: createdUser.id as string }),
tokenExpiration: new Date(Date.now() + 1000 * 60 * 60),
refreshToken: this._jwtService.sign(createdUser.id!),
refreshToken: this._jwtService.sign({ userId: createdUser.id as string }),
refreshTokenExpiration: new Date(Date.now() + 1000 * 60 * 60 * 24),
userDetails: createdUser,
};
Expand Down
Empty file.
60 changes: 30 additions & 30 deletions server/src/application/post/create-old/create-post.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
import { BaseUseCase } from '@application/shared';
import { CreatePostRequestDto } from '@contracts/dtos/posts/create/create-post.request';
import { CreatePostResponseDto } from '@contracts/dtos/posts/create/create-post.response';
import { Post } from '@domain/entities';
import { IPostRepository } from '@domain/repositories/post.repository';
// import { BaseUseCase } from '@application/shared';
// import { CreatePostResponseDto } from '@contracts/dtos/posts/create/create-post.response';
// import { Post } from '@domain/entities';
// import { IPostRepository } from '@domain/repositories/post.repository';
// import { CreatePostRequest } from '../create/create-post.request';

class CreatePostUseCase extends BaseUseCase<
CreatePostRequestDto,
CreatePostResponseDto
> {
protected async performOperation(
request: CreatePostRequestDto,
): Promise<CreatePostResponseDto> {
const post = Post.create(
request.title,
request.content,
request.authorId,
request.author,
);
const createdPost = await this._postRepository.createPost(post);
const result: CreatePostResponseDto = {
author: createdPost.author,
post: createdPost,
};
return result;
}
constructor(private _postRepository: IPostRepository) {
super();
}
}
// class CreatePostUseCase extends BaseUseCase<
// CreatePostRequest,
// CreatePostResponseDto
// > {
// protected async performOperation(
// request: CreatePostRequest,
// ): Promise<CreatePostResponseDto> {
// const post = Post.create(
// request.title,
// request.content,
// request.authorId,
// request.author,
// );
// const createdPost = await this._postRepository.createPost(post);
// const result: CreatePostResponseDto = {
// author: createdPost.author,
// post: createdPost,
// };
// return result;
// }
// constructor(private _postRepository: IPostRepository) {
// super();
// }
// }

export { CreatePostUseCase };
// export { CreatePostUseCase };

This file was deleted.

26 changes: 23 additions & 3 deletions server/src/application/post/create/create-post.request.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import { UseCaseRequest } from '@application/shared';
import { Post, User } from '@domain/entities';
import { POST_STATUS } from '@domain/eums/post-status.enum';
import { TriggeredBy } from '@domain/shared/entities/triggered-by';
import { UploadedFiles } from '@domain/shared/models';
// import { InvalidParameterException } from '@domain/shared/exceptions';
import { InvalidParameterException } from '@domain/shared/exceptions';

class CreatePostRequest extends UseCaseRequest {
readonly title: string;
readonly content: string;
readonly authorId: string;
readonly author: User;
readonly attachments: UploadedFiles[];
readonly status: POST_STATUS;

// Constructor Section
constructor(
Expand All @@ -25,13 +30,28 @@ class CreatePostRequest extends UseCaseRequest {
triggeredBy: TriggeredBy,
title: string,
content: string,
authorId: string,
author: User,
attachments: UploadedFiles[],
status: POST_STATUS = POST_STATUS.DRAFT,
): CreatePostRequest {
return new CreatePostRequest(triggeredBy, title, content, attachments);
return new CreatePostRequest(
triggeredBy,
title,
content,
authorId,
author,
attachments,
status,
);
}

// Validate here using EnsureClass
protected validatePayload(): void { }
protected validatePayload(): void {
if (!this.title || !this.content || !this.authorId || !this.author) {
throw new InvalidParameterException('Invalid request');
}
}
}

export { CreatePostRequest };
Loading

0 comments on commit 8252d23

Please sign in to comment.