Skip to content

Commit 89fbe64

Browse files
committed
feat(service/db): Adding several new services to connect with the database and integrating the application to connect with the database
- `service/db/index.ts`:It provides several methods for connecting to the database and disconnecting from the database, and another method that is a helper method for returning the table. - `service/db/group`: They provide services for Group Setting and Group Membership repo management - `service/db/user`: They provide warning, approved and user repo management services
1 parent 611d3f9 commit 89fbe64

6 files changed

Lines changed: 169 additions & 0 deletions

File tree

src/service/db/group/Membership.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { DatabaseService } from "..";
2+
import { GroupMembership } from "../../../entities/GroupMembership";
3+
4+
export class GroupMembershipService extends DatabaseService {
5+
private groupMembershipRepo = this.getRepo(GroupMembership);
6+
7+
async add(membership: GroupMembership) {
8+
return this.groupMembershipRepo.save(membership);
9+
}
10+
11+
async getById(id: number) {
12+
return this.groupMembershipRepo.findOne({ where: { id } });
13+
}
14+
15+
async remove(id: number) {
16+
return this.groupMembershipRepo.delete({ id });
17+
}
18+
async deleteUser(userId:number){
19+
return this.groupMembershipRepo.delete({ user: { id: userId } });
20+
}
21+
}

src/service/db/group/index.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { DatabaseService } from "..";
2+
import { GroupSettings } from "../../../entities/GroupSettings";
3+
4+
export class GroupSettingsService extends DatabaseService {
5+
private groupSettingsRepo = this.getRepo(GroupSettings);
6+
7+
async create(settings: Partial<GroupSettings>): Promise<GroupSettings> {
8+
return this.groupSettingsRepo.create(settings);
9+
}
10+
11+
async getByGroupId(groupId: number): Promise<GroupSettings | null> {
12+
return this.groupSettingsRepo.findOne({ where: { group_id: groupId } });
13+
}
14+
15+
async save(settings: GroupSettings) {
16+
return this.groupSettingsRepo.save(settings);
17+
}
18+
19+
async remove(id: number) {
20+
return this.groupSettingsRepo.delete({ id });
21+
}
22+
}

src/service/db/index.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { DataSource, ObjectLiteral, Repository } from "typeorm";
2+
import { AppDataSource } from "../../config/db";
3+
import { logger } from "../../config/logger";
4+
export class DatabaseService {
5+
protected db: DataSource;
6+
7+
constructor() {
8+
this.db = AppDataSource;
9+
}
10+
11+
protected getRepo<T extends ObjectLiteral>(entity: {
12+
new (): T;
13+
}): Repository<T> {
14+
return this.db.getRepository(entity);
15+
}
16+
17+
async initialize() {
18+
try {
19+
await this.db.initialize();
20+
logger.info("Database connection initialized", "DATABASE");
21+
} catch (error: any) {
22+
logger.error("Error initializing database connection", error, "DATABASE");
23+
}
24+
}
25+
26+
async close() {
27+
await this.db.destroy();
28+
logger.info("Database connection closed");
29+
}
30+
}
31+
export const db = new DatabaseService();

src/service/db/user/Approved.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { DatabaseService } from "..";
2+
import { ApprovedUser } from "../../../entities/ApprovedUser";
3+
import { GroupSettings } from "../../../entities/GroupSettings";
4+
5+
export class ApprovedUserService extends DatabaseService {
6+
private approvedUserRepo = this.getRepo(ApprovedUser);
7+
async create(userData: Partial<ApprovedUser>): Promise<ApprovedUser> {
8+
return this.approvedUserRepo.create(userData);
9+
}
10+
async save(user: ApprovedUser): Promise<ApprovedUser> {
11+
return this.approvedUserRepo.save(user);
12+
}
13+
14+
async getById(id: number): Promise<ApprovedUser | null> {
15+
return this.approvedUserRepo.findOne({ where: { id } });
16+
}
17+
async getByIdAndGroup(userId: number,groupSettings:GroupSettings) {
18+
return this.approvedUserRepo.findOne({
19+
where: { user_id: userId, group: groupSettings },
20+
});
21+
}
22+
async remove(id: number): Promise<void> {
23+
await this.approvedUserRepo.delete({ id });
24+
}
25+
}

src/service/db/user/index.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Context } from "grammy";
2+
import { DatabaseService } from "..";
3+
import { User } from "../../../entities/User";
4+
5+
export class UserService extends DatabaseService {
6+
private userRepo = this.getRepo(User);
7+
8+
async create(userdata: Partial<User>): Promise<User> {
9+
return this.userRepo.create(userdata);
10+
}
11+
12+
async getByTelegramId(telegramId: number) {
13+
return this.userRepo.findOne({ where: { telegram_id: telegramId } });
14+
}
15+
async save(user: User) {
16+
return this.userRepo.save(user);
17+
}
18+
async findByRelations(userId: number, relationship: string) {
19+
return this.userRepo.findOne({
20+
where: { telegram_id: userId },
21+
relations: [relationship],
22+
});
23+
}
24+
async removeUser(id: number) {
25+
return this.userRepo.delete({ id });
26+
}
27+
async createUser(ctx: Context, telegram_id: number) {
28+
const chatMember = await ctx.getChatMember(telegram_id);
29+
const role = chatMember.status;
30+
let user = await this.getByTelegramId(telegram_id);
31+
32+
if (!user) {
33+
user = await this.userRepo.create({
34+
telegram_id,
35+
role,
36+
warnings: [],
37+
});
38+
await this.userRepo.save(user);
39+
}
40+
41+
return user;
42+
}
43+
}

src/service/db/user/warning.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { DatabaseService } from "..";
2+
import { User } from "../../../entities/User";
3+
import { Warning } from "../../../entities/Warning";
4+
5+
export class WarningServiceDb extends DatabaseService {
6+
private warningRepo = this.getRepo(Warning);
7+
async create(warning: Partial<Warning>): Promise<Warning> {
8+
return this.warningRepo.create(warning);
9+
}
10+
async save(warning: Warning) {
11+
return this.warningRepo.save(warning);
12+
}
13+
14+
async getByUserId(userId: number) {
15+
return this.warningRepo.find({ where: { user: { id: userId } } });
16+
}
17+
async remove(id: number) {
18+
return this.warningRepo.delete({ id });
19+
}
20+
async clear(user: any) {
21+
return this.warningRepo.delete({ user });
22+
}
23+
24+
async count(user: User) {
25+
return await this.warningRepo.count({ where: { user } });
26+
}
27+
}

0 commit comments

Comments
 (0)