diff --git a/config.example.yml b/config.example.yml index 73617d7..0c07a68 100644 --- a/config.example.yml +++ b/config.example.yml @@ -7,7 +7,7 @@ telegram: url: https://something.org:3002/webhook enabled: false postgres: - uri: postgres://user:password@db/test + uri: postgres://user:password@db/bot logger: level: info vk: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e175a50 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.4' +services: + db: + container_name: bot-db + image: postgres:11-alpine + ports: + - 5432:5432 + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: password + POSTGRES_DB: bot + volumes: + - bot-db:/var/lib/postgresql/data + - /etc/localtime:/etc/localtime:ro +volumes: + bot-db: {} diff --git a/src/service/db/index.ts b/src/service/db/index.ts index cf2272e..0d7daef 100644 --- a/src/service/db/index.ts +++ b/src/service/db/index.ts @@ -1,5 +1,6 @@ import { VkEvent } from "../vk/types"; import { StoredEvent, StoredLike } from "./types"; +import { Like } from "./postgres/entities/Like"; export interface Storage { getEvent( @@ -9,7 +10,9 @@ export interface Storage { channel: string ): Promise; - createEvent(event: StoredEvent): Promise; + createEvent(event: Partial): Promise; + + createOrUpdateLike(like: Partial): Promise; getLikesFor(channel: string, messageId: number): Promise; diff --git a/src/service/db/postgres/entities/Like.ts b/src/service/db/postgres/entities/Like.ts index b16070f..3132510 100644 --- a/src/service/db/postgres/entities/Like.ts +++ b/src/service/db/postgres/entities/Like.ts @@ -8,7 +8,7 @@ import { import { StoredLike } from "../../types"; @Entity() -class Like implements StoredLike { +export class Like implements StoredLike { @PrimaryGeneratedColumn() id: number; @Column() diff --git a/src/service/db/postgres/index.ts b/src/service/db/postgres/index.ts index 8a463a9..701837b 100644 --- a/src/service/db/postgres/index.ts +++ b/src/service/db/postgres/index.ts @@ -3,6 +3,10 @@ import { VkEvent } from "../../vk/types"; import { StoredEvent } from "../types"; import { PostgresConfig } from "./types"; import { Connection, createConnection } from "typeorm"; +import logger from "../../logger"; +import path from "path"; + +const entities = [path.join(__dirname, "./entities/*")]; export class PostgresDB implements Storage { private connection: Connection; @@ -12,8 +16,14 @@ export class PostgresDB implements Storage { this.connection = await createConnection({ type: "postgres", url: this.config.uri, - entities: ["./entities/*.ts"], + entities, + logging: true, + synchronize: true, }); + + await this.connection.synchronize(); + + logger.info(`db connected to ${this.config.uri}`); }; getEvent = async (