Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
6754be0
Merge pull request #361 from need4deed-org/develop
arturasmckwcz Apr 13, 2026
fd17e3d
Merge pull request #366 from need4deed-org/develop
need4deed Apr 14, 2026
ea9fa3a
chore: add src/data/migrations/1776335627281-add-volunteer-notion-id.ts
need4deed Apr 16, 2026
5826af6
chore: update src/data/entity/volunteer/volunteer.entity.ts
need4deed Apr 16, 2026
15e0461
chore: update src/data/seeds/volunteer.seed.ts
need4deed Apr 16, 2026
3f745f0
chore: add src/data/seeds/migrate-notion.ts
need4deed Apr 16, 2026
c9d45af
chore: add scripts/csv-to-json.py
need4deed Apr 16, 2026
42de423
chore: add migrate:notion script
need4deed Apr 16, 2026
b091512
Merge pull request #380 from need4deed-org/feat/notion-data-migration
need4deed Apr 16, 2026
60f8b65
feat: support URL argument in migrate:notion script for production use
need4deed Apr 16, 2026
553b93d
feat: add migrate:notion:prod script for production container
need4deed Apr 16, 2026
d6e5e80
revert: to the current develop
arturasmckwcz Apr 17, 2026
c0cab4e
Merge branch 'develop'
arturasmckwcz Apr 17, 2026
c4c0024
Merge pull request #386 from need4deed-org/develop
arturasmckwcz Apr 17, 2026
b9cb274
Merge pull request #388 from need4deed-org/develop
arturasmckwcz Apr 17, 2026
055bfd1
Merge pull request #392 from need4deed-org/develop
arturasmckwcz Apr 19, 2026
59a62bd
Merge pull request #396 from need4deed-org/develop
arturasmckwcz Apr 20, 2026
7b743eb
Merge pull request #402 from need4deed-org/develop
arturasmckwcz Apr 21, 2026
38b92fd
Merge pull request #408 from need4deed-org/develop
arturasmckwcz Apr 23, 2026
dfc4af2
feat: add document.received + PATCH /volunteer/:id/doc/:type endpoint
nadavosa Apr 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/data/entity/document.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ export default class Document {
@Column({ nullable: true })
volunteerId: number;

@Column({ default: false })
received: boolean;

@Column({ nullable: true, type: "timestamp" })
receivedOn: Date | null;

@CreateDateColumn()
createdAt: Date;

Expand Down
18 changes: 18 additions & 0 deletions src/data/migrations/1777303247669-add-document-received.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class AddDocumentReceived1777303247669 implements MigrationInterface {
name = "AddDocumentReceived1777303247669";

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE "document"
ADD COLUMN IF NOT EXISTS "received" boolean NOT NULL DEFAULT false,
ADD COLUMN IF NOT EXISTS "received_on" timestamp
`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "document" DROP COLUMN IF EXISTS "received_on"`);
await queryRunner.query(`ALTER TABLE "document" DROP COLUMN IF EXISTS "received"`);
}
}
54 changes: 54 additions & 0 deletions src/server/routes/volunteer/doc.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
responseErrors,
volunteerDocSchemaGet200,
volunteerDocSchemaGetMeta200,
volunteerDocSchemaPatchBody,
volunteerDocSchemaUploadMeta,
} from "../../schema";
import { getVolunteerDocuments } from "../../utils";
Expand Down Expand Up @@ -244,4 +245,57 @@ export default async function volunteerDocRoutes(
});
},
);

fastify.patch<{
Params: { id: number; type: DocumentType };
Body: { received: boolean };
}>(
"/:type",
{
schema: {
params: idTypeParamSchema,
body: volunteerDocSchemaPatchBody,
response: {
200: {
type: "object",
properties: { message: { type: "string" } },
required: ["message"],
},
...responseErrors,
},
},
},
async (request, reply) => {
const { id, type } = request.params;
const { received } = request.body;
const documentRepository = fastify.db.documentRepository;

const doc = await documentRepository.findOneBy({ volunteerId: id, type });

if (!doc) {
return reply.status(404).send({
message: `Document of type:${type} for volunteer_id:${id} not found.`,
});
}

const [, error] = await tryCatch(
documentRepository.save({
...doc,
received,
receivedOn: received ? new Date() : null,
}),
);

if (error) {
logger.error(`Error updating document for volunteer ${id}: ${error}`);
return reply.status(400).send({
message: `Error updating document: ${error}`,
});
}

return reply.send({
message: `Document of type:${type} for volunteer_id:${id} successfully updated.`,
});
},
);
}
8 changes: 8 additions & 0 deletions src/server/schema/volunteer-doc.schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ export const volunteerDocSchemaGetMeta200 = {
required: ["url", "fields"],
};

export const volunteerDocSchemaPatchBody = {
type: "object",
properties: {
received: { type: "boolean" },
},
required: ["received"],
};

export const volunteerDocSchemaUploadMeta = {
type: "object",
properties: {
Expand Down
2 changes: 2 additions & 0 deletions src/services/dto/dto-document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ export function documentSerializer(doc: Document): ApiDocumentGet {
url: getDocumentUrl(doc.s3Key),
mimeType: doc.mimeType,
createdAt: doc.createdAt,
received: doc.received ?? false,
receivedOn: doc.receivedOn ?? null,
};
}