feat(api): add activities + work_sessions domain schema and shared contracts

This commit is contained in:
Bas van Rossem
2026-06-17 15:29:14 +02:00
parent 40a2512dfd
commit 57809985fd
6 changed files with 732 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
import { describe, it, expect } from 'vitest';
import { eq } from 'drizzle-orm';
import { db } from '../src/db/client';
import { activities, workSessions, user } from '../src/db/schema';
import { createApp } from '../src/app';
const json = { 'content-type': 'application/json' };
describe('domain schema', () => {
it('creates and reads back an activity with a json insole_types array', async () => {
const [inserted] = await db
.insert(activities)
.values({ name: 'Frezen', insoleTypes: ['Kurk', 'Berk'] })
.returning();
const [row] = await db.select().from(activities).where(eq(activities.id, inserted.id));
expect(row.name).toBe('Frezen');
expect(row.insoleTypes).toEqual(['Kurk', 'Berk']);
});
it('defaults a work_sessions row to status=active, source=app, pair_count=2, null end_time', async () => {
const app = createApp();
const creds = {
email: 'schema-user@example.com',
password: 'sterk-wachtwoord-123',
name: 'Schema User',
};
await app.request('/api/auth/sign-up/email', {
method: 'POST',
headers: json,
body: JSON.stringify(creds),
});
const [createdUser] = await db.select().from(user).where(eq(user.email, creds.email));
expect(createdUser).toBeTruthy();
const [activity] = await db
.insert(activities)
.values({ name: 'Slijpen', insoleTypes: ['Kurk', 'Berk', '3D'] })
.returning();
const [inserted] = await db
.insert(workSessions)
.values({
userId: createdUser.id,
activityId: activity.id,
startTime: new Date(),
})
.returning();
const [row] = await db.select().from(workSessions).where(eq(workSessions.id, inserted.id));
expect(row.status).toBe('active');
expect(row.source).toBe('app');
expect(row.pairCount).toBe(2);
expect(row.endTime).toBeNull();
expect(row.durationSeconds).toBeNull();
});
});