Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- run: pnpm install --frozen-lockfile

- name: Build packages
run: pnpm -r --filter @haip/shared --filter @haip/database run build
run: pnpm -r --filter @telivityhaip/shared --filter @telivityhaip/database run build

- name: Lint
run: pnpm lint
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Publish to npm

on:
release:
types: [published]
workflow_dispatch:

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build all packages
run: pnpm build

- name: Dry-run publish
run: pnpm -r publish --access public --no-git-checks --dry-run
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Publish to npm
run: pnpm -r publish --access public --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -369,16 +369,16 @@ cp .env.example .env
pnpm build

# Run database migrations
pnpm --filter @haip/api run migrate
pnpm --filter @telivityhaip/api run migrate

# Seed demo data (Telivity Grand Hotel)
pnpm --filter @haip/api run seed
pnpm --filter @telivityhaip/api run seed

# Start the API (with hot reload)
pnpm dev

# In a separate terminal — start the dashboard
pnpm --filter @haip/dashboard dev
pnpm --filter @telivityhaip/dashboard dev
```

- API: `http://localhost:3000`
Expand All @@ -401,10 +401,10 @@ This starts PostgreSQL, Redis, Keycloak, and the HAIP API + Dashboard in a singl
pnpm test

# API tests only
pnpm --filter @haip/api test
pnpm --filter @telivityhaip/api test

# Dashboard component tests
pnpm --filter @haip/dashboard test
pnpm --filter @telivityhaip/dashboard test

# Type checking
pnpm typecheck
Expand Down
6 changes: 3 additions & 3 deletions apps/api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ COPY apps/api/ ./apps/api/
COPY apps/dashboard/ ./apps/dashboard/

# Build workspace packages
RUN pnpm --filter @haip/shared run build
RUN pnpm --filter @haip/database run build
RUN pnpm --filter @telivityhaip/shared run build
RUN pnpm --filter @telivityhaip/database run build

# Build dashboard (Vite static output)
RUN pnpm --filter dashboard run build

# Build API (NestJS)
RUN pnpm --filter @haip/api run build
RUN pnpm --filter @telivityhaip/api run build

# Production stage
FROM node:20-alpine AS production
Expand Down
6 changes: 3 additions & 3 deletions apps/api/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "@haip/api",
"name": "@telivityhaip/api",
"version": "0.0.1",
"description": "HAIP API — NestJS REST API for the Hotel AI Platform",
"private": true,
Expand All @@ -17,8 +17,8 @@
"clean": "rm -rf dist"
},
"dependencies": {
"@haip/database": "workspace:*",
"@haip/shared": "workspace:^",
"@telivityhaip/database": "workspace:*",
"@telivityhaip/shared": "workspace:^",
"@nestjs/common": "^10.4.0",
"@nestjs/config": "^3.3.0",
"@nestjs/core": "^10.4.0",
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/database/database.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Global, Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import * as schema from '@haip/database';
import * as schema from '@telivityhaip/database';

export const DRIZZLE = Symbol('DRIZZLE');

Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/agent/agent.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from '@nestjs/common';
import { ApiTags, ApiOperation, ApiQuery } from '@nestjs/swagger';
import { eq, and, desc } from 'drizzle-orm';
import { guestReviews } from '@haip/database';
import { guestReviews } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { Roles } from '../auth/roles.decorator';
import { CurrentUser, type AuthUser } from '../auth/current-user.decorator';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/agent/agent.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, NotFoundException, BadRequestException } from '@nestjs/common';
import { eq, and, desc } from 'drizzle-orm';
import { agentConfigs, agentDecisions, agentTrainingSnapshots, auditLogs } from '@haip/database';
import { agentConfigs, agentDecisions, agentTrainingSnapshots, auditLogs } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService } from '../webhook/webhook.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, gte, not, inArray } from 'drizzle-orm';
import { reservations, guests, folios, payments, bookings } from '@haip/database';
import { reservations, guests, folios, payments, bookings } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, desc } from 'drizzle-orm';
import { channelConnections, bookings, reservations, agentDecisions } from '@haip/database';
import { channelConnections, bookings, reservations, agentDecisions } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/agent/demand/demand.agent.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, gte, lte, sql, not, inArray } from 'drizzle-orm';
import { reservations, rooms, roomTypes, agentConfigs, agentDecisions } from '@haip/database';
import { reservations, rooms, roomTypes, agentConfigs, agentDecisions } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
ratePlans,
bookings,
agentDecisions,
} from '@haip/database';
} from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import { EmailService } from './email.service';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import { housekeepingTasks, rooms, reservations, guests } from '@haip/database';
import { housekeepingTasks, rooms, reservations, guests } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, gte, lte, not, inArray } from 'drizzle-orm';
import { reservations, folios, charges as chargesTable, guests } from '@haip/database';
import { reservations, folios, charges as chargesTable, guests } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, gte, lte, not, inArray, desc } from 'drizzle-orm';
import { reservations, rooms, agentDecisions } from '@haip/database';
import { reservations, rooms, agentDecisions } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/agent/pricing/pricing.agent.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, desc } from 'drizzle-orm';
import { ratePlans, agentDecisions } from '@haip/database';
import { ratePlans, agentDecisions } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, OnModuleInit } from '@nestjs/common';
import { eq, and, inArray } from 'drizzle-orm';
import { guestReviews, reservations, roomTypes, properties } from '@haip/database';
import { guestReviews, reservations, roomTypes, properties } from '@telivityhaip/database';
import { DRIZZLE } from '../../../database/database.module';
import { AgentService } from '../agent.service';
import type {
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/channel/ari.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Injectable, Inject } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { eq, and } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { ariSyncLogs, ratePlans, rateRestrictions } from '@haip/database';
import { ariSyncLogs, ratePlans, rateRestrictions } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { ChannelAdapterFactory } from './channel-adapter.factory';
import { ChannelService } from './channel.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/channel/channel.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
NotFoundException,
} from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import { channelConnections } from '@haip/database';
import { channelConnections } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService } from '../webhook/webhook.service';
import { ChannelAdapterFactory } from './channel-adapter.factory';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, ConflictException, NotFoundException } from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import { bookings, reservations, guests, channelConnections } from '@haip/database';
import { bookings, reservations, guests, channelConnections } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { ChannelService } from './channel.service';
import { ChannelAdapterFactory } from './channel-adapter.factory';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/channel/rate-parity.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable, Inject } from '@nestjs/common';
import { eq, and, gte, lte } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { ratePlans, channelConnections } from '@haip/database';
import { ratePlans, channelConnections } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';

export interface RateParityResult {
Expand Down
4 changes: 2 additions & 2 deletions apps/api/src/modules/connect/connect-booking.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable, Inject, NotFoundException, BadRequestException } from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { bookings, reservations, guests, ratePlans, roomTypes, folios, rooms } from '@haip/database';
import { bookings, reservations, guests, ratePlans, roomTypes, folios, rooms } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { AvailabilityService } from '../reservation/availability.service';
import { WebhookService } from '../webhook/webhook.service';
Expand Down Expand Up @@ -444,7 +444,7 @@ export class ConnectBookingService {
}

private async getPropertySettings(propertyId: string): Promise<Record<string, unknown>> {
const { properties: props } = await import('@haip/database');
const { properties: props } = await import('@telivityhaip/database');
const [property] = await this.db
.select({ settings: props.settings })
.from(props)
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/connect/connect-content.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, NotFoundException } from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import { properties, roomTypes } from '@haip/database';
import { properties, roomTypes } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';

@Injectable()
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/connect/connect-events.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable, Inject, NotFoundException, Optional } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { eq, and, gte, desc } from 'drizzle-orm';
import { agentWebhookSubscriptions, auditLogs } from '@haip/database';
import { agentWebhookSubscriptions, auditLogs } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import type { CreateSubscriptionDto } from './dto/agent-event-subscription.dto';
import { WebhookDeliveryService } from '../webhook/webhook-delivery.service';
Expand Down
4 changes: 2 additions & 2 deletions apps/api/src/modules/connect/connect-insights.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
rooms,
ratePlans,
housekeepingTasks,
} from '@haip/database';
} from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';

@Injectable()
Expand Down Expand Up @@ -403,7 +403,7 @@ export class ConnectInsightsService {
}

private async getGuestInfo(guestId: string) {
const { guests } = await import('@haip/database');
const { guests } = await import('@telivityhaip/database');
const [guest] = await this.db
.select()
.from(guests)
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/connect/connect-search.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable, Inject } from '@nestjs/common';
import { eq, and, gte, lte } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { properties, roomTypes, ratePlans, rateRestrictions } from '@haip/database';
import { properties, roomTypes, ratePlans, rateRestrictions } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { AvailabilityService } from '../reservation/availability.service';
import type { AgentSearchDto } from './dto/agent-search.dto';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/folio/folio-routing.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
} from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { folios, reservations, payments } from '@haip/database';
import { folios, reservations, payments } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { FolioService } from './folio.service';
import { TransferCityLedgerDto } from './dto/transfer-city-ledger.dto';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/folio/folio.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from '@nestjs/common';
import { eq, and, sql, gte, lte } from 'drizzle-orm';
import Decimal from 'decimal.js';
import { folios, charges, payments } from '@haip/database';
import { folios, charges, payments } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService } from '../webhook/webhook.service';
import { TaxService } from '../tax/tax.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/guest/guest.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, NotFoundException } from '@nestjs/common';
import { eq, ilike, or, and, sql, inArray } from 'drizzle-orm';
import { guests, reservations, auditLogs } from '@haip/database';
import { guests, reservations, auditLogs } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { CreateGuestDto } from './dto/create-guest.dto';
import { UpdateGuestDto } from './dto/update-guest.dto';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/housekeeping/housekeeping.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { eq, and, sql, desc, asc, inArray, gte, lt } from 'drizzle-orm';
import { housekeepingTasks, rooms, reservations, guests, properties, roomTypes } from '@haip/database';
import { housekeepingTasks, rooms, reservations, guests, properties, roomTypes } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService, type WebhookPayload } from '../webhook/webhook.service';
import { RoomStatusService } from '../room/room-status.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/night-audit/night-audit.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
ratePlans,
properties,
rooms,
} from '@haip/database';
} from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { FolioService } from '../folio/folio.service';
import { ReservationService } from '../reservation/reservation.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/payment/payment.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '@nestjs/common';
import { eq, and, sql } from 'drizzle-orm';
import { Decimal } from 'decimal.js';
import { payments } from '@haip/database';
import { payments } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService } from '../webhook/webhook.service';
import { FolioService } from '../folio/folio.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/payment/stripe-webhook.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { ConfigService } from '@nestjs/config';
import { ApiTags, ApiOperation, ApiExcludeEndpoint } from '@nestjs/swagger';
import { Public } from '../auth/public.decorator';
import { eq } from 'drizzle-orm';
import { payments } from '@haip/database';
import { payments } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { WebhookService } from '../webhook/webhook.service';
import { FolioService } from '../folio/folio.service';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/property/property.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Inject, NotFoundException } from '@nestjs/common';
import { eq } from 'drizzle-orm';
import { properties } from '@haip/database';
import { properties } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { CreatePropertyDto } from './dto/create-property.dto';
import { UpdatePropertyDto } from './dto/update-property.dto';
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/modules/rate-plan/rate-plan.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
BadRequestException,
} from '@nestjs/common';
import { eq, and } from 'drizzle-orm';
import { ratePlans, rateRestrictions } from '@haip/database';
import { ratePlans, rateRestrictions } from '@telivityhaip/database';
import { DRIZZLE } from '../../database/database.module';
import { CreateRatePlanDto } from './dto/create-rate-plan.dto';
import { UpdateRatePlanDto } from './dto/update-rate-plan.dto';
Expand Down
Loading
Loading