From 1a74bb3bcddfed64fbe25fc66b416cabd5c10033 Mon Sep 17 00:00:00 2001 From: Phill Pover Date: Mon, 31 Mar 2025 11:08:29 +0100 Subject: [PATCH] New posts and users modules --- backend/src/app.module.ts | 12 ++++---- backend/src/comment/comment.entity.ts | 16 ----------- backend/src/database/database.module.ts | 2 +- backend/src/post/post.module.ts | 1 - backend/src/posts/dto/create-post.dto.ts | 4 +++ backend/src/posts/post.entity.ts | 13 +++++++++ backend/src/posts/posts.controller.spec.ts | 18 ++++++++++++ backend/src/posts/posts.controller.ts | 24 ++++++++++++++++ backend/src/posts/posts.module.ts | 9 ++++++ backend/src/posts/posts.service.spec.ts | 18 ++++++++++++ backend/src/posts/posts.service.ts | 33 ++++++++++++++++++++++ backend/src/users/user.entity.ts | 16 +++++++++++ backend/src/users/users.controller.spec.ts | 18 ++++++++++++ backend/src/users/users.controller.ts | 4 +++ backend/src/users/users.module.ts | 9 ++++++ backend/src/users/users.service.spec.ts | 18 ++++++++++++ backend/src/users/users.service.ts | 24 ++++++++++++++++ 17 files changed, 216 insertions(+), 23 deletions(-) delete mode 100644 backend/src/comment/comment.entity.ts create mode 100644 backend/src/posts/dto/create-post.dto.ts create mode 100644 backend/src/posts/post.entity.ts create mode 100644 backend/src/posts/posts.controller.spec.ts create mode 100644 backend/src/posts/posts.controller.ts create mode 100644 backend/src/posts/posts.module.ts create mode 100644 backend/src/posts/posts.service.spec.ts create mode 100644 backend/src/posts/posts.service.ts create mode 100644 backend/src/users/user.entity.ts create mode 100644 backend/src/users/users.controller.spec.ts create mode 100644 backend/src/users/users.controller.ts create mode 100644 backend/src/users/users.module.ts create mode 100644 backend/src/users/users.service.spec.ts create mode 100644 backend/src/users/users.service.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index afa9ecd..ea519e0 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; -import { PostModule } from './post/post.module'; -import { DatabaseModule } from './database/database.module'; import { ConfigModule } from '@nestjs/config'; import configuration from './config/configuration'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; +import { DatabaseModule } from './database/database.module'; +import { PostsModule } from './posts/posts.module'; +import { UsersModule } from './users/users.module'; @Module({ imports: [ @@ -12,7 +13,8 @@ import configuration from './config/configuration'; load: [configuration] }), DatabaseModule, - PostModule + PostsModule, + UsersModule ], controllers: [AppController], providers: [AppService], diff --git a/backend/src/comment/comment.entity.ts b/backend/src/comment/comment.entity.ts deleted file mode 100644 index 530c9a6..0000000 --- a/backend/src/comment/comment.entity.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm'; -import { Post } from '../post/post.entity'; - -@Entity() -export class Comment { - - @PrimaryGeneratedColumn() - id: number; - - @Column() - text: string; - - @ManyToOne(() => Post, (post) => post.comments) - post: Post; - -} diff --git a/backend/src/database/database.module.ts b/backend/src/database/database.module.ts index fee3089..7164cd0 100644 --- a/backend/src/database/database.module.ts +++ b/backend/src/database/database.module.ts @@ -18,7 +18,7 @@ import configuration from '../config/configuration'; password: configService.get('database.password'), database: configService.get('database.name'), entities: [__dirname + '/../**/*.entity{.ts,.js}'], - synchronize: true, // Be cautious about using synchronize in production + synchronize: true, }), inject: [ConfigService], }), diff --git a/backend/src/post/post.module.ts b/backend/src/post/post.module.ts index fede4f1..af735ef 100644 --- a/backend/src/post/post.module.ts +++ b/backend/src/post/post.module.ts @@ -3,7 +3,6 @@ import { PostController } from './post.controller'; import { PostService } from './post.service'; @Module({ - imports: [ PostService ], controllers: [PostController], providers: [PostService] }) diff --git a/backend/src/posts/dto/create-post.dto.ts b/backend/src/posts/dto/create-post.dto.ts new file mode 100644 index 0000000..a91b9d4 --- /dev/null +++ b/backend/src/posts/dto/create-post.dto.ts @@ -0,0 +1,4 @@ +export CreatePostDto { + title: string; + body: string; +} diff --git a/backend/src/posts/post.entity.ts b/backend/src/posts/post.entity.ts new file mode 100644 index 0000000..c7ee653 --- /dev/null +++ b/backend/src/posts/post.entity.ts @@ -0,0 +1,13 @@ +import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Post { + @PrimaryGeneratedColumn() + id: number + + @Column() + title: string + + @Column() + body: string +} diff --git a/backend/src/posts/posts.controller.spec.ts b/backend/src/posts/posts.controller.spec.ts new file mode 100644 index 0000000..7784335 --- /dev/null +++ b/backend/src/posts/posts.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PostsController } from './posts.controller'; + +describe('PostsController', () => { + let controller: PostsController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [PostsController], + }).compile(); + + controller = module.get(PostsController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/posts/posts.controller.ts b/backend/src/posts/posts.controller.ts new file mode 100644 index 0000000..c4de74d --- /dev/null +++ b/backend/src/posts/posts.controller.ts @@ -0,0 +1,24 @@ +import { Controller, Get } from '@nestjs/common'; +import { PostsService } from './posts.service'; +import { CreatePostDto } from './dto'; + +@Controller('posts') +export class PostsController { + + constructor(private readonly postsService: PostService) {} + + @Get() + findAll(): string { + return this.postsService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string): string { + return this.postsService.findOne(id); + } + + @Post() + create(@Body() createPostDto: CreatePostDto): string { + return this.postsService; + } +} diff --git a/backend/src/posts/posts.module.ts b/backend/src/posts/posts.module.ts new file mode 100644 index 0000000..4920fbb --- /dev/null +++ b/backend/src/posts/posts.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Post } from './Post.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([Post])], + exports: [TypeOrmModule] +}) +export class PostsModule {} diff --git a/backend/src/posts/posts.service.spec.ts b/backend/src/posts/posts.service.spec.ts new file mode 100644 index 0000000..e152158 --- /dev/null +++ b/backend/src/posts/posts.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PostsService } from './posts.service'; + +describe('PostsService', () => { + let service: PostsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [PostsService], + }).compile(); + + service = module.get(PostsService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/posts/posts.service.ts b/backend/src/posts/posts.service.ts new file mode 100644 index 0000000..e06239f --- /dev/null +++ b/backend/src/posts/posts.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Post } from './Post.entity'; + +@Injectable() +export class PostsService { + constructor( + @InjectRepository(Post) + private PostsRepository: Repository, + ) {} + + findAll(): Promise { + return this.PostsRepository.find(); + } + + findOne(id: number): Promise { + return this.PostsRepository.findOneBy({ id }); + } + + async create(title: string, body: string) Promise { + const newPost = this.PostsRepository.create({ + title: title, + body: body + }); + const post = await this.PostsRepository.save(newPost); + return post.id; + } + + async remove(id: number): Promise { + await this.PostsRepository.delete(id); + } +} diff --git a/backend/src/users/user.entity.ts b/backend/src/users/user.entity.ts new file mode 100644 index 0000000..02da722 --- /dev/null +++ b/backend/src/users/user.entity.ts @@ -0,0 +1,16 @@ +import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class User { + @PrimaryGeneratedColumn() + id: number; + + @Column() + firstName: string; + + @Column() + lastName: string; + + @Column({ default: true }) + isActive: boolean; +} diff --git a/backend/src/users/users.controller.spec.ts b/backend/src/users/users.controller.spec.ts new file mode 100644 index 0000000..3e27c39 --- /dev/null +++ b/backend/src/users/users.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UsersController } from './users.controller'; + +describe('UsersController', () => { + let controller: UsersController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UsersController], + }).compile(); + + controller = module.get(UsersController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/users/users.controller.ts b/backend/src/users/users.controller.ts new file mode 100644 index 0000000..43b3842 --- /dev/null +++ b/backend/src/users/users.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('users') +export class UsersController {} diff --git a/backend/src/users/users.module.ts b/backend/src/users/users.module.ts new file mode 100644 index 0000000..9a2ca48 --- /dev/null +++ b/backend/src/users/users.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { User } from './user.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([User])], + exports: [TypeOrmModule] +}) +export class UsersModule {} diff --git a/backend/src/users/users.service.spec.ts b/backend/src/users/users.service.spec.ts new file mode 100644 index 0000000..62815ba --- /dev/null +++ b/backend/src/users/users.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UsersService } from './users.service'; + +describe('UsersService', () => { + let service: UsersService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [UsersService], + }).compile(); + + service = module.get(UsersService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/users/users.service.ts b/backend/src/users/users.service.ts new file mode 100644 index 0000000..6d13e0e --- /dev/null +++ b/backend/src/users/users.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { User } from './user.entity'; + +@Injectable() +export class UsersService { + constructor( + @InjectRepository(User) + private usersRepository: Repository, + ) {} + + findAll(): Promise { + return this.usersRepository.find(); + } + + findOne(id: number): Promise { + return this.usersRepository.findOneBy({ id }); + } + + async remove(id: number): Promise { + await this.usersRepository.delete(id); + } +}