From fa2388e9e7bd474712ba41e34a884e893eefad8a Mon Sep 17 00:00:00 2001 From: Roy Scheeren Date: Wed, 31 Jan 2024 17:02:15 +0100 Subject: [PATCH] feat(envited.ascs.digital): get profile functionality Signed-off-by: Roy Scheeren --- .../app/companies/[slug]/page.tsx | 14 + .../common/database/queries/profiles.ts | 3 + .../common/database/queries/queries.ts | 13 +- .../common/database/queries/users.test.ts | 2 + .../common/database/queries/users.ts | 5 + .../common/database/schema.ts | 1 + .../common/guards/guards.ts | 7 +- .../common/serverActions/index.ts | 2 +- .../common/serverActions/profiles/get.test.ts | 157 +++- .../common/serverActions/profiles/get.ts | 13 +- .../common/types/types.ts | 1 + .../common/utils/utils.test.ts | 10 + .../common/utils/utils.ts | 8 + .../development/0007_calm_micromacro.sql | 7 + .../development/0008_goofy_scarlet_witch.sql | 2 + .../development/meta/0007_snapshot.json | 745 +++++++++++++++++ .../development/meta/0008_snapshot.json | 752 ++++++++++++++++++ .../drizzle/development/meta/_journal.json | 14 + .../drizzle/staging/0006_fine_maverick.sql | 8 + .../drizzle/staging/meta/0006_snapshot.json | 752 ++++++++++++++++++ .../drizzle/staging/meta/_journal.json | 7 + 21 files changed, 2482 insertions(+), 41 deletions(-) create mode 100644 apps/envited.ascs.digital/app/companies/[slug]/page.tsx create mode 100644 apps/envited.ascs.digital/drizzle/development/0007_calm_micromacro.sql create mode 100644 apps/envited.ascs.digital/drizzle/development/0008_goofy_scarlet_witch.sql create mode 100644 apps/envited.ascs.digital/drizzle/development/meta/0007_snapshot.json create mode 100644 apps/envited.ascs.digital/drizzle/development/meta/0008_snapshot.json create mode 100644 apps/envited.ascs.digital/drizzle/staging/0006_fine_maverick.sql create mode 100644 apps/envited.ascs.digital/drizzle/staging/meta/0006_snapshot.json diff --git a/apps/envited.ascs.digital/app/companies/[slug]/page.tsx b/apps/envited.ascs.digital/app/companies/[slug]/page.tsx new file mode 100644 index 00000000..ed9bff7d --- /dev/null +++ b/apps/envited.ascs.digital/app/companies/[slug]/page.tsx @@ -0,0 +1,14 @@ +import { getProfile } from '../../../common/serverActions' +import { Header } from '../../../modules/Header' + +export default async function Index({ params }: { params: { slug: string } }) { + const { slug } = params + const profile = await getProfile(slug) + + return ( + <> +
+
{JSON.stringify(profile)}
+ + ) +} diff --git a/apps/envited.ascs.digital/common/database/queries/profiles.ts b/apps/envited.ascs.digital/common/database/queries/profiles.ts index a4fb5c4a..1c449a66 100644 --- a/apps/envited.ascs.digital/common/database/queries/profiles.ts +++ b/apps/envited.ascs.digital/common/database/queries/profiles.ts @@ -18,3 +18,6 @@ export const maybeUpdatePublishedState = (db: DatabaseConnection) => async (data return db.update(profile).set({ isPublished, updatedAt: new Date() }).where(eq(profile.name, data.name)).returning() } + +export const getProfileBySlug = (db: DatabaseConnection) => async (slug: string) => + db.select().from(profile).where(eq(profile.slug, slug)) diff --git a/apps/envited.ascs.digital/common/database/queries/queries.ts b/apps/envited.ascs.digital/common/database/queries/queries.ts index c03558de..dcf92573 100644 --- a/apps/envited.ascs.digital/common/database/queries/queries.ts +++ b/apps/envited.ascs.digital/common/database/queries/queries.ts @@ -5,8 +5,15 @@ import { fromPairs, map, pipe, toPairs } from 'ramda' import { connectDb } from '../database' import * as schema from '../schema' import { fetchTables } from './common' -import { maybeUpdatePublishedState, update as updateProfile } from './profiles' -import { deleteUserById, getUserById, getUserWithProfileById, getUsersByIssuerId, insertUserTx } from './users' +import { getProfileBySlug, maybeUpdatePublishedState, update as updateProfile } from './profiles' +import { + deleteUserById, + getUserById, + getUserByIssuerId, + getUserWithProfileById, + getUsersByIssuerId, + insertUserTx, +} from './users' const queries = { deleteUserById, @@ -17,6 +24,8 @@ const queries = { insertUserTx, updateProfile, maybeUpdatePublishedState, + getProfileBySlug, + getUserByIssuerId, } export const init = diff --git a/apps/envited.ascs.digital/common/database/queries/users.test.ts b/apps/envited.ascs.digital/common/database/queries/users.test.ts index 97dad846..e4d16003 100644 --- a/apps/envited.ascs.digital/common/database/queries/users.test.ts +++ b/apps/envited.ascs.digital/common/database/queries/users.test.ts @@ -144,12 +144,14 @@ describe('common/database/users', () => { const result = await SUT.insertCompanyProfileTx(tx)({ name: 'NAME', + slug: 'name', isPublished: false, }) expect(tx.insert).toHaveBeenCalledWith(profile) expect(tx.insert().values).toHaveBeenCalledWith({ name: 'NAME', + slug: 'name', isPublished: false, createdAt: new Date(), updatedAt: new Date(), diff --git a/apps/envited.ascs.digital/common/database/queries/users.ts b/apps/envited.ascs.digital/common/database/queries/users.ts index 678c046c..a1a4acda 100644 --- a/apps/envited.ascs.digital/common/database/queries/users.ts +++ b/apps/envited.ascs.digital/common/database/queries/users.ts @@ -6,6 +6,7 @@ import postgres from 'postgres' import { isEmpty, prop, propOr } from 'ramda' import { Profile } from '../../types' +import { slugify } from '../../utils/utils' import * as schema from '../schema' import { addressType, @@ -32,6 +33,9 @@ export const getUserById = (db: DatabaseConnection) => async (id: string) => export const getUserWithProfileById = (db: DatabaseConnection) => async (id: string) => db.select().from(user).where(eq(user.id, id)).leftJoin(profile, eq(user.name, profile.name)) +export const getUserByIssuerId = (db: DatabaseConnection) => async (issuerId: string) => + db.select().from(user).where(eq(user.id, issuerId)) + export const getUsersByIssuerId = (db: DatabaseConnection) => async (issuerId: string) => db.select().from(user).where(eq(user.issuerId, issuerId)) @@ -200,6 +204,7 @@ export const _txn = await insertCompanyProfileTx(tx)({ name: credentialSubject.name, + slug: slugify(credentialSubject.name), streetAddress: credentialSubject.address.streetAddress, postalCode: credentialSubject.address.postalCode, addressLocality: credentialSubject.address.addressLocality, diff --git a/apps/envited.ascs.digital/common/database/schema.ts b/apps/envited.ascs.digital/common/database/schema.ts index 3600d475..a259c953 100644 --- a/apps/envited.ascs.digital/common/database/schema.ts +++ b/apps/envited.ascs.digital/common/database/schema.ts @@ -118,6 +118,7 @@ export const profile = pgTable('profile', { .unique() .notNull() .references(() => user.name), + slug: text('slug').unique().notNull(), description: text('description'), logo: text('logo'), streetAddress: text('street_address'), diff --git a/apps/envited.ascs.digital/common/guards/guards.ts b/apps/envited.ascs.digital/common/guards/guards.ts index 72145793..e0b9cc80 100644 --- a/apps/envited.ascs.digital/common/guards/guards.ts +++ b/apps/envited.ascs.digital/common/guards/guards.ts @@ -1,4 +1,4 @@ -import { equals, path, pathOr, prop } from 'ramda' +import { equals, pathOr, prop } from 'ramda' import { Role, Session, User } from '../../common/types/types' @@ -13,7 +13,6 @@ export const userIsIssuedByLoggedInUser = (user: User) => (session: Session) => equals(prop('issuerId')(user))(pathOr('', ['user', 'pkh'])(session)) export const isOwnProfile = (user: User) => (profile: { name: string }) => - equals(path(['profile', 'name'])(user))(prop('name')(profile)) + equals(prop('name')(user))(prop('name')(profile)) -export const isUsersCompanyProfile = (principal: User) => (profile: { name: string }) => - equals(prop('name')(principal))(prop('name')(profile)) +export const isUsersCompanyProfile = isOwnProfile diff --git a/apps/envited.ascs.digital/common/serverActions/index.ts b/apps/envited.ascs.digital/common/serverActions/index.ts index 2af1704a..d31e2d8f 100644 --- a/apps/envited.ascs.digital/common/serverActions/index.ts +++ b/apps/envited.ascs.digital/common/serverActions/index.ts @@ -1,2 +1,2 @@ export { getUserById, getUsersByIssuerId, insertUser } from './users' -export { updateProfile } from './profiles' +export { updateProfile, getProfile } from './profiles' diff --git a/apps/envited.ascs.digital/common/serverActions/profiles/get.test.ts b/apps/envited.ascs.digital/common/serverActions/profiles/get.test.ts index 665415ec..aa9a869f 100644 --- a/apps/envited.ascs.digital/common/serverActions/profiles/get.test.ts +++ b/apps/envited.ascs.digital/common/serverActions/profiles/get.test.ts @@ -3,42 +3,94 @@ import * as SUT from './get' describe('serverActions/profiles/get', () => { describe('get', () => { - it('should get the profile as expected', async () => { + it('should get the own full profile as expected', async () => { // when ... we want to get the full profile for a principal user // then ... it should get the profile as expected const getServerSessionStub = jest.fn().mockResolvedValue({ user: { - id: 'USER_PKH', + id: 'USER_PRINCIPAL_PKH', role: Role.principal, }, }) const dbStub = jest.fn().mockResolvedValue({ - getProfileById: jest.fn().mockResolvedValue({ - name: 'USER_NAME', - description: 'USER_DESCRIPTION', - principalName: 'USER_PRINCIPAL_NAME', - }), - getUserById: jest.fn().mockResolvedValue({ - name: 'USER_NAME', - profile: { + getProfileBySlug: jest.fn().mockResolvedValue([ + { + name: 'USER_PRINCIPAL_NAME', + description: 'USER_DESCRIPTION', + principalName: 'USER_PRINCIPAL_NAME', + }, + ]), + getUserById: jest.fn().mockResolvedValue([ + { + name: 'USER_PRINCIPAL_NAME', + }, + ]), + getUserByIssuerId: jest.fn().mockResolvedValue([ + { + name: 'USER_PRINCIPAL_NAME', + }, + ]), + }) + + const slug = 'PROFILE_SLUG' + + const result = await SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(slug) + const db = await dbStub() + expect(result).toEqual({ + name: 'USER_PRINCIPAL_NAME', + description: 'USER_DESCRIPTION', + principalName: 'USER_PRINCIPAL_NAME', + }) + expect(getServerSessionStub).toHaveBeenCalledWith() + expect(db.getProfileBySlug).toHaveBeenCalledWith(slug) + expect(db.getUserById).toHaveBeenCalledWith('USER_PRINCIPAL_PKH') + expect(db.getUserByIssuerId).not.toHaveBeenCalled() + }) + + it('should get the full profile for a principals user as expected', async () => { + // when ... we want to get the full profile for the user of a certain principal + // then ... it should get the profile as expected + const getServerSessionStub = jest.fn().mockResolvedValue({ + user: { + id: 'USER_PKH', + role: Role.user, + }, + }) + + const dbStub = jest.fn().mockResolvedValue({ + getProfileBySlug: jest.fn().mockResolvedValue([ + { + name: 'USER_PRINCIPAL_NAME', + description: 'USER_DESCRIPTION', + principalName: 'USER_PRINCIPAL_NAME', + }, + ]), + getUserById: jest.fn().mockResolvedValue([ + { name: 'USER_NAME', }, - }), + ]), + getUserByIssuerId: jest.fn().mockResolvedValue([ + { + name: 'USER_PRINCIPAL_NAME', + }, + ]), }) - const id = 'PROFILE_ID' + const slug = 'PROFILE_SLUG' - const result = await SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(id) + const result = await SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(slug) const db = await dbStub() expect(result).toEqual({ - name: 'USER_NAME', + name: 'USER_PRINCIPAL_NAME', description: 'USER_DESCRIPTION', principalName: 'USER_PRINCIPAL_NAME', }) expect(getServerSessionStub).toHaveBeenCalledWith() - expect(db.getProfileById).toHaveBeenCalledWith(id) + expect(db.getProfileBySlug).toHaveBeenCalledWith(slug) expect(db.getUserById).toHaveBeenCalledWith('USER_PKH') + expect(db.getUserByIssuerId).toHaveBeenCalled() }) it('should return a limited profile when there is no session', async () => { @@ -47,27 +99,78 @@ describe('serverActions/profiles/get', () => { const getServerSessionStub = jest.fn().mockResolvedValue(null) const dbStub = jest.fn().mockResolvedValue({ - getProfileById: jest.fn().mockResolvedValue({ - name: 'USER_NAME', - description: 'USER_DESCRIPTION', - principalName: 'USER_PRINCIPAL_NAME', - }), - getUserById: jest.fn().mockResolvedValue({ - name: 'USER_NAME', - profile: { + getProfileBySlug: jest.fn().mockResolvedValue([ + { + name: 'USER_NAME', + description: 'USER_DESCRIPTION', + principalName: 'USER_PRINCIPAL_NAME', + }, + ]), + getUserById: jest.fn().mockResolvedValue([ + { name: 'USER_NAME', + profile: { + name: 'USER_NAME', + }, }, - }), + ]), }) - const id = 'PROFILE_ID' - - const result = await SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(id) + const slug = 'PROFILE_SLUG' + const result = await SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(slug) + const db = await dbStub() expect(result).toEqual({ name: 'USER_NAME', description: 'USER_DESCRIPTION', }) + expect(getServerSessionStub).toHaveBeenCalledWith() + expect(db.getProfileBySlug).toHaveBeenCalledWith(slug) + expect(db.getUserById).not.toHaveBeenCalled() + }) + + it('should throw an error when the profile id is missing', async () => { + // when ... we want to get a profile but the id is missing + // then ... it should throw an error + const getServerSessionStub = jest.fn().mockResolvedValue([ + { + user: { + id: 'USER_PRINCIPAL_PKH', + role: Role.principal, + }, + }, + ]) + + const dbStub = jest.fn().mockResolvedValue({}) + + const slug = '' + + expect.assertions(3) + await expect(() => SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(slug)).rejects.toThrow() + expect(getServerSessionStub).not.toHaveBeenCalledWith() + expect(dbStub).not.toHaveBeenCalled() }) }) + + it('should throw an error when the profile is not found', async () => { + // when ... we want to get a non existant profile + // then ... it should throw an error + const getServerSessionStub = jest.fn().mockResolvedValue({ + user: { + id: 'USER_PRINCIPAL_PKH', + role: Role.principal, + }, + }) + + const dbStub = jest.fn().mockResolvedValue({ + getProfileBySlug: jest.fn().mockResolvedValue(null), + }) + + const slug = 'NON_EXISTANT_PROFILE_SLUG' + const db = await dbStub() + await expect(() => SUT._get({ db: dbStub, getServerSession: getServerSessionStub })(slug)).rejects.toThrow() + expect(getServerSessionStub).toHaveBeenCalledWith() + expect(dbStub).toHaveBeenCalledWith() + expect(db.getProfileBySlug).toHaveBeenCalledWith(slug) + }) }) diff --git a/apps/envited.ascs.digital/common/serverActions/profiles/get.ts b/apps/envited.ascs.digital/common/serverActions/profiles/get.ts index 3e289b18..404141bd 100644 --- a/apps/envited.ascs.digital/common/serverActions/profiles/get.ts +++ b/apps/envited.ascs.digital/common/serverActions/profiles/get.ts @@ -1,6 +1,5 @@ 'use server' -import { error } from 'console' import { isEmpty, isNil, omit } from 'ramda' import { getServerSession } from '../../auth' @@ -9,32 +8,32 @@ import { db } from '../../database/queries' import { Database } from '../../database/types' import { isOwnProfile, isUsersCompanyProfile } from '../../guards' import { Session } from '../../types' -import { badRequestError, notFoundError } from '../../utils' +import { badRequestError, error, notFoundError } from '../../utils' export const _get = ({ db, getServerSession }: { db: Database; getServerSession: () => Promise }) => - async (id: string) => { + async (slug: string) => { try { - if (isNil(id) || isEmpty(id)) { + if (isNil(slug) || isEmpty(slug)) { throw badRequestError('Missing profile id') } const session = await getServerSession() const connection = await db() - const profile = await connection.getProfileById(id) + const [profile] = await connection.getProfileBySlug(slug) if (isNil(profile) || isEmpty(profile)) { throw notFoundError() } if (!isNil(session)) { - const user = await connection.getUserById(session.user.id) + const [user] = await connection.getUserById(session.user.id) if (isOwnProfile(user)(profile)) { return profile } - const principal = await connection.getPrincipalByUserId(user.id) + const [principal] = await connection.getUserByIssuerId(user.issuerId) if (isUsersCompanyProfile(principal)(profile)) { return profile } diff --git a/apps/envited.ascs.digital/common/types/types.ts b/apps/envited.ascs.digital/common/types/types.ts index bfc89916..e61df8be 100644 --- a/apps/envited.ascs.digital/common/types/types.ts +++ b/apps/envited.ascs.digital/common/types/types.ts @@ -76,6 +76,7 @@ export interface User { export interface Profile { id?: string name: string + slug: string description?: string | null logo?: string | null streetAddress?: string | null diff --git a/apps/envited.ascs.digital/common/utils/utils.test.ts b/apps/envited.ascs.digital/common/utils/utils.test.ts index 3577d1de..812c1f23 100644 --- a/apps/envited.ascs.digital/common/utils/utils.test.ts +++ b/apps/envited.ascs.digital/common/utils/utils.test.ts @@ -31,4 +31,14 @@ describe('common/utils', () => { expect(result).toEqual('AscsUser') }) }) + + describe('slugify', () => { + it('should create a slug of the string as expected', () => { + // when ... we want to create a slug of the string + // then ... we should get the slug as expected + const result = SUT.slugify('This is a test') + + expect(result).toEqual('this-is-a-test') + }) + }) }) diff --git a/apps/envited.ascs.digital/common/utils/utils.ts b/apps/envited.ascs.digital/common/utils/utils.ts index 97bf7d82..8dbf172e 100644 --- a/apps/envited.ascs.digital/common/utils/utils.ts +++ b/apps/envited.ascs.digital/common/utils/utils.ts @@ -5,3 +5,11 @@ export const extractIdFromCredential = pathOr('', ['credentialSubject', 'id']) export const extractIssuerIdFromCredential = pathOr('', ['issuer', 'id']) export const extractTypeFromCredential = pathOr('', ['credentialSubject', 'type']) + +export const slugify = (string: string) => + string + .toLowerCase() + .trim() + .replace(/[^\w\s-]/g, '') + .replace(/[\s_-]+/g, '-') + .replace(/^-+|-+$/g, '') diff --git a/apps/envited.ascs.digital/drizzle/development/0007_calm_micromacro.sql b/apps/envited.ascs.digital/drizzle/development/0007_calm_micromacro.sql new file mode 100644 index 00000000..708dbc3c --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/development/0007_calm_micromacro.sql @@ -0,0 +1,7 @@ +ALTER TABLE "profile" RENAME COLUMN "first_name" TO "sales_name";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "phone" TO "sales_phone";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "email" TO "sales_email";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "last_name" TO "principal_name";--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "slug" text;--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "principal_phone" text;--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "principal_email" text; \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/development/0008_goofy_scarlet_witch.sql b/apps/envited.ascs.digital/drizzle/development/0008_goofy_scarlet_witch.sql new file mode 100644 index 00000000..306aa3ab --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/development/0008_goofy_scarlet_witch.sql @@ -0,0 +1,2 @@ +ALTER TABLE "profile" ALTER COLUMN "slug" SET NOT NULL;--> statement-breakpoint +ALTER TABLE "profile" ADD CONSTRAINT "profile_slug_unique" UNIQUE("slug"); \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/development/meta/0007_snapshot.json b/apps/envited.ascs.digital/drizzle/development/meta/0007_snapshot.json new file mode 100644 index 00000000..f1d5b7c5 --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/development/meta/0007_snapshot.json @@ -0,0 +1,745 @@ +{ + "id": "9e388076-f6fb-406c-a10e-d368f8cdd15c", + "prevId": "7c39d3af-9803-4f74-b950-55a3f248f0ab", + "version": "5", + "dialect": "pg", + "tables": { + "addressType": { + "name": "addressType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "addressType_name_unique": { + "name": "addressType_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "companyCategory": { + "name": "companyCategory", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "companyCategory_id_unique": { + "name": "companyCategory_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "companyCategory_name_unique": { + "name": "companyCategory_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "credentialType": { + "name": "credentialType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "issuer": { + "name": "issuer", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "issuer_id_unique": { + "name": "issuer_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_name": { + "name": "sales_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_phone": { + "name": "sales_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_email": { + "name": "sales_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_name": { + "name": "principal_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_phone": { + "name": "principal_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_email": { + "name": "principal_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "offerings": { + "name": "offerings", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "is_published": { + "name": "is_published", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "profile_name_user_name_fk": { + "name": "profile_name_user_name_fk", + "tableFrom": "profile", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "name" + ], + "columnsTo": [ + "name" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_name_unique": { + "name": "profile_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "profilesToCompanyCategories": { + "name": "profilesToCompanyCategories", + "schema": "", + "columns": { + "profile_id": { + "name": "profile_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "company_category_id": { + "name": "company_category_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profilesToCompanyCategories_profile_id_profile_id_fk": { + "name": "profilesToCompanyCategories_profile_id_profile_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "profile", + "schemaTo": "public", + "columnsFrom": [ + "profile_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "profilesToCompanyCategories_company_category_id_companyCategory_id_fk": { + "name": "profilesToCompanyCategories_company_category_id_companyCategory_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "companyCategory", + "schemaTo": "public", + "columnsFrom": [ + "company_category_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "role": { + "name": "role", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "role_id_unique": { + "name": "role_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_ascs_member": { + "name": "is_ascs_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_envited_member": { + "name": "is_envited_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "vat_id": { + "name": "vat_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "privacy_policy_accepted": { + "name": "privacy_policy_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "articles_of_association_accepted": { + "name": "articles_of_association_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contribution_rules_accepted": { + "name": "contribution_rules_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "issuer_id": { + "name": "issuer_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address_type_id": { + "name": "address_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "issuance_date": { + "name": "issuance_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expiration_date": { + "name": "expiration_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "is_active": { + "name": "is_active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_issuer_id_issuer_id_fk": { + "name": "user_issuer_id_issuer_id_fk", + "tableFrom": "user", + "tableTo": "issuer", + "schemaTo": "public", + "columnsFrom": [ + "issuer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "user_address_type_id_addressType_id_fk": { + "name": "user_address_type_id_addressType_id_fk", + "tableFrom": "user", + "tableTo": "addressType", + "schemaTo": "public", + "columnsFrom": [ + "address_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_id_unique": { + "name": "user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "user_name_unique": { + "name": "user_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "usersToCredentialTypes": { + "name": "usersToCredentialTypes", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "credential_type_id": { + "name": "credential_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToCredentialTypes_user_id_user_id_fk": { + "name": "usersToCredentialTypes_user_id_user_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToCredentialTypes_credential_type_id_credentialType_id_fk": { + "name": "usersToCredentialTypes_credential_type_id_credentialType_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "credentialType", + "schemaTo": "public", + "columnsFrom": [ + "credential_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "usersToRoles": { + "name": "usersToRoles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToRoles_user_id_user_id_fk": { + "name": "usersToRoles_user_id_user_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToRoles_role_id_role_id_fk": { + "name": "usersToRoles_role_id_role_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "role", + "schemaTo": "public", + "columnsFrom": [ + "role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/development/meta/0008_snapshot.json b/apps/envited.ascs.digital/drizzle/development/meta/0008_snapshot.json new file mode 100644 index 00000000..1bf86170 --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/development/meta/0008_snapshot.json @@ -0,0 +1,752 @@ +{ + "id": "5bc1029f-3da8-4d61-84b1-70356c60f4f7", + "prevId": "9e388076-f6fb-406c-a10e-d368f8cdd15c", + "version": "5", + "dialect": "pg", + "tables": { + "addressType": { + "name": "addressType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "addressType_name_unique": { + "name": "addressType_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "companyCategory": { + "name": "companyCategory", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "companyCategory_id_unique": { + "name": "companyCategory_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "companyCategory_name_unique": { + "name": "companyCategory_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "credentialType": { + "name": "credentialType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "issuer": { + "name": "issuer", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "issuer_id_unique": { + "name": "issuer_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_name": { + "name": "sales_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_phone": { + "name": "sales_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_email": { + "name": "sales_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_name": { + "name": "principal_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_phone": { + "name": "principal_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_email": { + "name": "principal_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "offerings": { + "name": "offerings", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "is_published": { + "name": "is_published", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "profile_name_user_name_fk": { + "name": "profile_name_user_name_fk", + "tableFrom": "profile", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "name" + ], + "columnsTo": [ + "name" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_name_unique": { + "name": "profile_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + }, + "profile_slug_unique": { + "name": "profile_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + } + }, + "profilesToCompanyCategories": { + "name": "profilesToCompanyCategories", + "schema": "", + "columns": { + "profile_id": { + "name": "profile_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "company_category_id": { + "name": "company_category_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profilesToCompanyCategories_profile_id_profile_id_fk": { + "name": "profilesToCompanyCategories_profile_id_profile_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "profile", + "schemaTo": "public", + "columnsFrom": [ + "profile_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "profilesToCompanyCategories_company_category_id_companyCategory_id_fk": { + "name": "profilesToCompanyCategories_company_category_id_companyCategory_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "companyCategory", + "schemaTo": "public", + "columnsFrom": [ + "company_category_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "role": { + "name": "role", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "role_id_unique": { + "name": "role_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_ascs_member": { + "name": "is_ascs_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_envited_member": { + "name": "is_envited_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "vat_id": { + "name": "vat_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "privacy_policy_accepted": { + "name": "privacy_policy_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "articles_of_association_accepted": { + "name": "articles_of_association_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contribution_rules_accepted": { + "name": "contribution_rules_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "issuer_id": { + "name": "issuer_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address_type_id": { + "name": "address_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "issuance_date": { + "name": "issuance_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expiration_date": { + "name": "expiration_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "is_active": { + "name": "is_active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_issuer_id_issuer_id_fk": { + "name": "user_issuer_id_issuer_id_fk", + "tableFrom": "user", + "tableTo": "issuer", + "schemaTo": "public", + "columnsFrom": [ + "issuer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "user_address_type_id_addressType_id_fk": { + "name": "user_address_type_id_addressType_id_fk", + "tableFrom": "user", + "tableTo": "addressType", + "schemaTo": "public", + "columnsFrom": [ + "address_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_id_unique": { + "name": "user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "user_name_unique": { + "name": "user_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "usersToCredentialTypes": { + "name": "usersToCredentialTypes", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "credential_type_id": { + "name": "credential_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToCredentialTypes_user_id_user_id_fk": { + "name": "usersToCredentialTypes_user_id_user_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToCredentialTypes_credential_type_id_credentialType_id_fk": { + "name": "usersToCredentialTypes_credential_type_id_credentialType_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "credentialType", + "schemaTo": "public", + "columnsFrom": [ + "credential_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "usersToRoles": { + "name": "usersToRoles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToRoles_user_id_user_id_fk": { + "name": "usersToRoles_user_id_user_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToRoles_role_id_role_id_fk": { + "name": "usersToRoles_role_id_role_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "role", + "schemaTo": "public", + "columnsFrom": [ + "role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/development/meta/_journal.json b/apps/envited.ascs.digital/drizzle/development/meta/_journal.json index dc0598fe..65c61390 100644 --- a/apps/envited.ascs.digital/drizzle/development/meta/_journal.json +++ b/apps/envited.ascs.digital/drizzle/development/meta/_journal.json @@ -50,6 +50,20 @@ "when": 1706625704993, "tag": "0006_complete_caretaker", "breakpoints": true + }, + { + "idx": 7, + "version": "5", + "when": 1706714023800, + "tag": "0007_calm_micromacro", + "breakpoints": true + }, + { + "idx": 8, + "version": "5", + "when": 1706714069769, + "tag": "0008_goofy_scarlet_witch", + "breakpoints": true } ] } \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/staging/0006_fine_maverick.sql b/apps/envited.ascs.digital/drizzle/staging/0006_fine_maverick.sql new file mode 100644 index 00000000..65cc9338 --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/staging/0006_fine_maverick.sql @@ -0,0 +1,8 @@ +ALTER TABLE "profile" RENAME COLUMN "first_name" TO "sales_name";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "phone" TO "sales_phone";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "email" TO "sales_email";--> statement-breakpoint +ALTER TABLE "profile" RENAME COLUMN "last_name" TO "principal_name";--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "slug" text NOT NULL;--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "principal_phone" text;--> statement-breakpoint +ALTER TABLE "profile" ADD COLUMN "principal_email" text;--> statement-breakpoint +ALTER TABLE "profile" ADD CONSTRAINT "profile_slug_unique" UNIQUE("slug"); \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/staging/meta/0006_snapshot.json b/apps/envited.ascs.digital/drizzle/staging/meta/0006_snapshot.json new file mode 100644 index 00000000..f23a8d56 --- /dev/null +++ b/apps/envited.ascs.digital/drizzle/staging/meta/0006_snapshot.json @@ -0,0 +1,752 @@ +{ + "id": "7751b268-6c28-4ff5-a7cb-a2c59831b157", + "prevId": "557a5fc8-66db-4aa8-bc60-1c6600b02847", + "version": "5", + "dialect": "pg", + "tables": { + "addressType": { + "name": "addressType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "addressType_name_unique": { + "name": "addressType_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "companyCategory": { + "name": "companyCategory", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "companyCategory_id_unique": { + "name": "companyCategory_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "companyCategory_name_unique": { + "name": "companyCategory_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "credentialType": { + "name": "credentialType", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "issuer": { + "name": "issuer", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "issuer_id_unique": { + "name": "issuer_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "profile": { + "name": "profile", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_name": { + "name": "sales_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_phone": { + "name": "sales_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sales_email": { + "name": "sales_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_name": { + "name": "principal_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_phone": { + "name": "principal_phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "principal_email": { + "name": "principal_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "offerings": { + "name": "offerings", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "is_published": { + "name": "is_published", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "profile_name_user_name_fk": { + "name": "profile_name_user_name_fk", + "tableFrom": "profile", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "name" + ], + "columnsTo": [ + "name" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "profile_name_unique": { + "name": "profile_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + }, + "profile_slug_unique": { + "name": "profile_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + } + }, + "profilesToCompanyCategories": { + "name": "profilesToCompanyCategories", + "schema": "", + "columns": { + "profile_id": { + "name": "profile_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "company_category_id": { + "name": "company_category_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "profilesToCompanyCategories_profile_id_profile_id_fk": { + "name": "profilesToCompanyCategories_profile_id_profile_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "profile", + "schemaTo": "public", + "columnsFrom": [ + "profile_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "profilesToCompanyCategories_company_category_id_companyCategory_id_fk": { + "name": "profilesToCompanyCategories_company_category_id_companyCategory_id_fk", + "tableFrom": "profilesToCompanyCategories", + "tableTo": "companyCategory", + "schemaTo": "public", + "columnsFrom": [ + "company_category_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "role": { + "name": "role", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "role_id_unique": { + "name": "role_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_ascs_member": { + "name": "is_ascs_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "is_envited_member": { + "name": "is_envited_member", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "street_address": { + "name": "street_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postal_code": { + "name": "postal_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_locality": { + "name": "address_locality", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_country": { + "name": "address_country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "vat_id": { + "name": "vat_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "privacy_policy_accepted": { + "name": "privacy_policy_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "articles_of_association_accepted": { + "name": "articles_of_association_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contribution_rules_accepted": { + "name": "contribution_rules_accepted", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "issuer_id": { + "name": "issuer_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address_type_id": { + "name": "address_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "issuance_date": { + "name": "issuance_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expiration_date": { + "name": "expiration_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "is_active": { + "name": "is_active", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "user_issuer_id_issuer_id_fk": { + "name": "user_issuer_id_issuer_id_fk", + "tableFrom": "user", + "tableTo": "issuer", + "schemaTo": "public", + "columnsFrom": [ + "issuer_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "user_address_type_id_addressType_id_fk": { + "name": "user_address_type_id_addressType_id_fk", + "tableFrom": "user", + "tableTo": "addressType", + "schemaTo": "public", + "columnsFrom": [ + "address_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_id_unique": { + "name": "user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "user_name_unique": { + "name": "user_name_unique", + "nullsNotDistinct": false, + "columns": [ + "name" + ] + } + } + }, + "usersToCredentialTypes": { + "name": "usersToCredentialTypes", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "credential_type_id": { + "name": "credential_type_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToCredentialTypes_user_id_user_id_fk": { + "name": "usersToCredentialTypes_user_id_user_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToCredentialTypes_credential_type_id_credentialType_id_fk": { + "name": "usersToCredentialTypes_credential_type_id_credentialType_id_fk", + "tableFrom": "usersToCredentialTypes", + "tableTo": "credentialType", + "schemaTo": "public", + "columnsFrom": [ + "credential_type_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "usersToRoles": { + "name": "usersToRoles", + "schema": "", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "name": "role_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "usersToRoles_user_id_user_id_fk": { + "name": "usersToRoles_user_id_user_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "user", + "schemaTo": "public", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "usersToRoles_role_id_role_id_fk": { + "name": "usersToRoles_role_id_role_id_fk", + "tableFrom": "usersToRoles", + "tableTo": "role", + "schemaTo": "public", + "columnsFrom": [ + "role_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/envited.ascs.digital/drizzle/staging/meta/_journal.json b/apps/envited.ascs.digital/drizzle/staging/meta/_journal.json index a8d95c24..f4684af5 100644 --- a/apps/envited.ascs.digital/drizzle/staging/meta/_journal.json +++ b/apps/envited.ascs.digital/drizzle/staging/meta/_journal.json @@ -43,6 +43,13 @@ "when": 1706625722525, "tag": "0005_sour_king_cobra", "breakpoints": true + }, + { + "idx": 6, + "version": "5", + "when": 1706716757110, + "tag": "0006_fine_maverick", + "breakpoints": true } ] } \ No newline at end of file