3 Commits

Author SHA1 Message Date
78cda7d3c4 fix: update dockerfile to run npm start (#31)
fix: update dockerfile to run npm start (which runs ts-node) instead of node

Co-authored-by: Aster Fialla <asterfialla@gmail.com>
2026-03-03 07:43:25 -05:00
21587dcb7a fix: update message helper reference hotfix (#30)
* forgot to update a reference in messageHelper to memberRepo instead of memberHelper

* turned off data-source logging

---------

Co-authored-by: Aster Fialla <asterfialla@gmail.com>
2026-03-02 08:50:41 -05:00
aeb7d88ee9 feat: Add migration to migrate existing data to new member table (#29)
added migration to fill new Member table with data from Members

Co-authored-by: Aster Fialla <asterfialla@gmail.com>
2026-03-01 22:10:03 -05:00
5 changed files with 20 additions and 8 deletions

View File

@@ -7,4 +7,4 @@ FROM node:20-alpine
WORKDIR /app WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/node_modules ./node_modules
COPY . . COPY . .
CMD ["node", "src/bot.js"] CMD ["npm", "start"]

View File

@@ -13,7 +13,7 @@ export const AppDataSource = new DataSource({
password: process.env.POSTGRES_PASSWORD, password: process.env.POSTGRES_PASSWORD,
database: "postgres", database: "postgres",
synchronize: false, synchronize: false,
logging: true, logging: false,
entities: [path.join(__dirname, "./entity/*.{ts,js}")], entities: [path.join(__dirname, "./entity/*.{ts,js}")],
migrations: [path.join(__dirname, "./migrations/*.{ts,js}")], migrations: [path.join(__dirname, "./migrations/*.{ts,js}")],
migrationsRun: true, migrationsRun: true,

View File

@@ -0,0 +1,12 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class AddData1772419448503 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`INSERT INTO "Member"(id, userid, name,displayname, proxy, propic, "createdAt", "updatedAt") SELECT id,userid, name,displayname, proxy, propic, "createdAt", "updatedAt" FROM "Members";`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`TRUNCATE TABLE "Member"`);
}
}

View File

@@ -1,4 +1,4 @@
const {memberHelper} = require('./memberHelper.js'); const {memberRepo} = require('../repositories/memberRepo.js');
const msgh = {}; const msgh = {};
@@ -39,7 +39,7 @@ msgh.parseCommandArgs = function(content, commandName) {
* @returns {Promise<{model, string, bool}>} The proxy message object. * @returns {Promise<{model, string, bool}>} The proxy message object.
*/ */
msgh.parseProxyTags = async function (authorId, content, attachmentUrl = null){ msgh.parseProxyTags = async function (authorId, content, attachmentUrl = null){
const members = await memberHelper.getMembersByAuthor(authorId); const members = await memberRepo.getMembersByAuthor(authorId);
// If an author has no members, no sense in searching for proxy // If an author has no members, no sense in searching for proxy
if (members.length === 0) { if (members.length === 0) {
return; return;

View File

@@ -2,16 +2,16 @@ const env = require('dotenv');
env.config(); env.config();
jest.mock('../../src/helpers/memberHelper.js', () => { jest.mock('../../src/repositories/memberRepo.js', () => {
return { return {
memberHelper: { memberRepo: {
getMembersByAuthor: jest.fn() getMembersByAuthor: jest.fn()
} }
} }
}) })
const {memberHelper} = require("../../src/helpers/memberHelper.js");
const {messageHelper} = require("../../src/helpers/messageHelper.js"); const {messageHelper} = require("../../src/helpers/messageHelper.js");
const {memberRepo} = require("../../src/repositories/memberRepo");
describe('messageHelper', () => { describe('messageHelper', () => {
@@ -54,7 +54,7 @@ describe('messageHelper', () => {
const attachmentUrl = "../oya.png" const attachmentUrl = "../oya.png"
beforeEach(() => { beforeEach(() => {
memberHelper.getMembersByAuthor = jest.fn().mockImplementation((specificAuthorId) => { memberRepo.getMembersByAuthor = jest.fn().mockImplementation((specificAuthorId) => {
if (specificAuthorId === "1") return membersFor1; if (specificAuthorId === "1") return membersFor1;
if (specificAuthorId === "2") return membersFor2; if (specificAuthorId === "2") return membersFor2;
if (specificAuthorId === "3") return membersFor3; if (specificAuthorId === "3") return membersFor3;