diff --git a/docker-compose.yml b/docker-compose.yml index c9494e9..62b7d30 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,25 @@ version: '3.8' services: + mysql: + image: mysql:8.0 + container_name: gala-mysql + restart: unless-stopped + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-gala_root_pass} + - MYSQL_DATABASE=${MYSQL_DATABASE:-gala_db} + - MYSQL_USER=${MYSQL_USER:-gala_user} + - MYSQL_PASSWORD=${MYSQL_PASSWORD:-gala_pass} + volumes: + - mysql_data:/var/lib/mysql + networks: + - gala-network + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + redis: image: redis:7-alpine container_name: gala-redis @@ -22,8 +41,12 @@ services: - REDIS_HOST=redis - REDIS_PORT=6379 - CORS_ORIGINS=${CORS_ORIGINS:-*} + - DATABASE_URL=mysql://${MYSQL_USER:-gala_user}:${MYSQL_PASSWORD:-gala_pass}@mysql:3306/${MYSQL_DATABASE:-gala_db} depends_on: - - redis + mysql: + condition: service_healthy + redis: + condition: service_started networks: - gala-network @@ -49,6 +72,7 @@ services: - gala-network volumes: + mysql_data: redis_data: caddy_data: caddy_config: diff --git a/packages/client-mobile/src/components/StampDock.vue b/packages/client-mobile/src/components/StampDock.vue deleted file mode 100644 index 6c4e89e..0000000 --- a/packages/client-mobile/src/components/StampDock.vue +++ /dev/null @@ -1,295 +0,0 @@ - - - - - diff --git a/packages/client-mobile/src/stores/connection.ts b/packages/client-mobile/src/stores/connection.ts index eaba719..4efb60b 100644 --- a/packages/client-mobile/src/stores/connection.ts +++ b/packages/client-mobile/src/stores/connection.ts @@ -150,7 +150,7 @@ export const useConnectionStore = defineStore('connection', () => { if (data.userTickets) { import('./voting').then(({ useVotingStore }) => { const votingStore = useVotingStore(); - votingStore.syncFromServer(data.userTickets); + votingStore.syncFromServer(data.userTickets as Record); }); } }); diff --git a/packages/client-mobile/src/stores/voting.ts b/packages/client-mobile/src/stores/voting.ts index 4657079..ffe48c3 100644 --- a/packages/client-mobile/src/stores/voting.ts +++ b/packages/client-mobile/src/stores/voting.ts @@ -9,6 +9,7 @@ export interface AwardConfig { name: string; icon: string; order: number; + remark?: string; } // 节目接口 diff --git a/packages/client-mobile/src/views/VotingPage.vue b/packages/client-mobile/src/views/VotingPage.vue index 4db37d4..3b25d47 100644 --- a/packages/client-mobile/src/views/VotingPage.vue +++ b/packages/client-mobile/src/views/VotingPage.vue @@ -37,7 +37,7 @@ onMounted(async () => { diff --git a/packages/server/Dockerfile b/packages/server/Dockerfile index 5e84352..01e6e00 100644 --- a/packages/server/Dockerfile +++ b/packages/server/Dockerfile @@ -23,6 +23,9 @@ RUN pnpm build WORKDIR /app/packages/server RUN pnpm build +# Generate Prisma Client in builder stage +RUN npx prisma generate + # Production stage FROM node:20-alpine AS production @@ -39,9 +42,15 @@ COPY --from=builder /app/pnpm-lock.yaml ./ COPY --from=builder /app/packages/server/package.json ./packages/server/ COPY --from=builder /app/packages/shared ./packages/shared +# Copy Prisma schema +COPY --from=builder /app/packages/server/prisma ./packages/server/prisma + # Install production dependencies only RUN pnpm install --prod --frozen-lockfile +# Copy generated Prisma Client from builder stage (pnpm workspace location) +COPY --from=builder /app/node_modules/.pnpm ./node_modules/.pnpm + # Copy built files COPY --from=builder /app/packages/server/dist ./packages/server/dist COPY --from=builder /app/packages/server/src/lua ./packages/server/lua