Create modules,providers, services for bd

This commit is contained in:
Errormacr
2023-11-17 21:32:11 +03:00
parent 795cd6468a
commit 256fa08fc4
26 changed files with 653 additions and 77 deletions

View File

@@ -3,20 +3,20 @@ import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get<AppController>(AppController);
});
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
appController = app.get<AppController>(AppController);
});
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});
});

View File

@@ -3,10 +3,10 @@ import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get()
getHello(): string {
return this.appService.getHello();
}
}

View File

@@ -3,8 +3,8 @@ import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

View File

@@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
getHello(): string {
return 'Hello World!';
}
}

5
backend/src/constants.ts Normal file
View File

@@ -0,0 +1,5 @@
export const userRep: string = 'USER_REPOSITORY';
export const dataSource: string = 'DATA_SOURCE';
export const adminRep: string = 'ADMIN_REPOSITORY';
export const photoRep: string = 'PHOTO_REPOSITORY';
export const postRep: string = 'POST_REPOSITORY';

62
backend/src/db.entity.ts Normal file
View File

@@ -0,0 +1,62 @@
import { v4 as UUID } from 'uuid';
import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, CreateDateColumn, PrimaryColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
user_name: string;
}
@Entity()
export class Admin {
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => User)
@JoinColumn()
user: User;
}
@Entity()
export class Post {
@PrimaryColumn('uuid')
uuid: UUID;
@Column()
posted: boolean;
@OneToOne(() => User)
@JoinColumn()
from_user: User;
@Column()
text: string;
@Column()
media_group_id: string;
@Column('int', { array: true })
images: number[];
@CreateDateColumn()
timestamp: Date;
}
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => Post)
@JoinColumn()
post: Post;
@Column()
text: string;
@Column()
file_id: string;
}

View File

@@ -0,0 +1,8 @@
import { Module } from '@nestjs/common';
import { databaseProviders } from './db.providers';
@Module({
providers: [...databaseProviders],
exports: [...databaseProviders],
})
export class DatabaseModule {}

View File

@@ -0,0 +1,22 @@
import { DataSource } from 'typeorm';
export const databaseProviders = [
{
provide: 'DATA_SOURCE',
useFactory: async () => {
const dataSource = new DataSource({
type: 'postgres',
host: 'localhost',
port: 15432,
username: 'postgres',
password: 'postgres',
database: 'bot_db',
entities: ['db_models.ts'],
logging: true,
synchronize: true,
});
return dataSource.initialize();
},
},
];

View File

@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from 'src/db.modules';
import { AdminService } from 'src/db_service/admin.service';
import { adminProviders } from 'src/db_providers/admin.providers';
@Module({
imports: [DatabaseModule],
providers: [...adminProviders, AdminService],
})
export class PhotoModule {}

View File

@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from 'src/db.modules';
import { photoProviders } from 'src/db_providers/photo.providers';
import { PhotoService } from 'src/db_service/photo.service';
@Module({
imports: [DatabaseModule],
providers: [...photoProviders, PhotoService],
})
export class PhotoModule {}

View File

@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from 'src/db.modules';
import { PostService } from 'src/db_service/post.service';
import { postProviders } from 'src/db_providers/post.providers';
@Module({
imports: [DatabaseModule],
providers: [...postProviders, PostService],
})
export class PhotoModule {}

View File

@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { DatabaseModule } from 'src/db.modules';
import { UserService } from 'src/db_service/user.service';
import { userProviders } from 'src/db_providers/user.providers';
@Module({
imports: [DatabaseModule],
providers: [...userProviders, UserService],
})
export class PhotoModule {}

View File

@@ -0,0 +1,11 @@
import { DataSource } from 'typeorm';
import { Admin } from '../db.entity';
import { adminRep, dataSource } from '../constants';
export const adminProviders = [
{
provide: adminRep,
useFactory: (dataSource: DataSource) => dataSource.getRepository(Admin),
inject: [dataSource],
},
];

View File

@@ -0,0 +1,22 @@
import { DataSource } from 'typeorm';
export const databaseProviders = [
{
provide: 'DATA_SOURCE',
useFactory: async () => {
const dataSource = new DataSource({
type: 'postgres',
host: 'localhost',
port: 15432,
username: 'postgres',
password: 'postgres',
database: 'bot_db',
entities: ['db_models.ts'],
logging: true,
synchronize: true,
});
return dataSource.initialize();
},
},
];

View File

@@ -0,0 +1,11 @@
import { DataSource } from 'typeorm';
import { Photo } from '../db.entity';
import { photoRep, dataSource } from '../constants';
export const photoProviders = [
{
provide: photoRep,
useFactory: (dataSource: DataSource) => dataSource.getRepository(Photo),
inject: [dataSource],
},
];

View File

@@ -0,0 +1,11 @@
import { DataSource } from 'typeorm';
import { Post } from '../db.entity';
import { postRep, dataSource } from '../constants';
export const postProviders = [
{
provide: postRep,
useFactory: (dataSource: DataSource) => dataSource.getRepository(Post),
inject: [dataSource],
},
];

View File

@@ -0,0 +1,11 @@
import { DataSource } from 'typeorm';
import { User } from '../db.entity';
import { userRep, dataSource } from '../constants';
export const userProviders = [
{
provide: userRep,
useFactory: (dataSource: DataSource) => dataSource.getRepository(User),
inject: [dataSource],
},
];

View File

@@ -0,0 +1,15 @@
import { Injectable, Inject } from '@nestjs/common';
import { Repository } from 'typeorm';
import { Admin } from '../db.entity';
import { adminRep } from '../constants';
@Injectable()
export class AdminService {
constructor(
@Inject(adminRep)
private photoRepository: Repository<Admin>,
) {}
async findAll(): Promise<Admin[]> {
return this.photoRepository.find();
}
}

View File

@@ -0,0 +1,16 @@
import { Injectable, Inject } from '@nestjs/common';
import { Repository } from 'typeorm';
import { Photo } from '../db.entity';
import { photoRep } from '../constants';
@Injectable()
export class PhotoService {
constructor(
@Inject(photoRep)
private photoRepository: Repository<Photo>,
) {}
async findAll(): Promise<Photo[]> {
return this.photoRepository.find();
}
}

View File

@@ -0,0 +1,15 @@
import { Injectable, Inject } from '@nestjs/common';
import { Repository } from 'typeorm';
import { Post } from '../db.entity';
import { postRep } from '../constants';
@Injectable()
export class PostService {
constructor(
@Inject(postRep)
private photoRepository: Repository<Post>,
) {}
async findAll(): Promise<Post[]> {
return this.photoRepository.find();
}
}

View File

@@ -0,0 +1,15 @@
import { Injectable, Inject } from '@nestjs/common';
import { Repository } from 'typeorm';
import { User } from '../db.entity';
import { userRep } from '../constants';
@Injectable()
export class UserService {
constructor(
@Inject(userRep)
private photoRepository: Repository<User>,
) {}
async findAll(): Promise<User[]> {
return this.photoRepository.find();
}
}

View File

@@ -2,7 +2,7 @@ import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();