Files
Cibello-app/packages/database/src/schema/_shared.ts
T
2026-08-05 19:21:11 +07:00

115 lines
4.7 KiB
TypeScript

/**
* Delade kolumnhjälpare och pg-enums för hela schemat.
* Alla enum-värden kommer från @app/shared-types så att databas,
* API och app aldrig glider isär.
*/
import { pgEnum, timestamp } from "drizzle-orm/pg-core";
import {
ACTIVITY_LEVELS,
ALLERGENS,
CONSENT_KINDS,
CONSENT_STATUSES,
COOKING_METHODS,
CREATOR_LEVELS,
CUISINES,
DATE_KINDS,
DIET_PATTERNS,
EVENT_TYPES,
EXPIRY_STATUSES,
GOAL_TYPES,
HOUSEHOLD_ROLES,
INVENTORY_SOURCES,
INVENTORY_TRANSACTION_TYPES,
JOB_STATUSES,
JOB_TYPES,
MEAL_LOG_SOURCES,
MEAL_TYPES,
MEMORY_KINDS,
NOTIFICATION_TYPES,
PRECISION_MODES,
PROFILE_VISIBILITIES,
RECIPE_DIFFICULTIES,
RECIPE_SIMILARITY_CLASSES,
RECIPE_SOURCE_TYPES,
RECIPE_STATUSES,
RECIPE_VARIANT_TYPES,
RECIPE_VERIFICATION_STATUSES,
RELIGIOUS_RULES,
SCAN_TYPES,
SEXES,
SIGNAL_ORIGINS,
STORAGE_LOCATION_TYPES,
SUBSCRIPTION_PLANS,
SUBSCRIPTION_PROVIDERS,
SUBSCRIPTION_STATUSES,
TASTE_AXES,
UNITS,
USER_ROLES,
VERIFICATION_STATUSES,
tuple,
} from "@app/shared-types";
// --- Tidsstämplar som återanvänds av alla tabeller ---
export const createdAt = () =>
timestamp("created_at", { withTimezone: true }).notNull().defaultNow();
export const updatedAt = () =>
timestamp("updated_at", { withTimezone: true }).notNull().defaultNow();
// --- pg-enums ---
export const userRoleEnum = pgEnum("user_role", tuple(USER_ROLES));
export const sexEnum = pgEnum("sex", tuple(SEXES));
export const activityLevelEnum = pgEnum("activity_level", tuple(ACTIVITY_LEVELS));
export const goalTypeEnum = pgEnum("goal_type", tuple(GOAL_TYPES));
export const dietPatternEnum = pgEnum("diet_pattern", tuple(DIET_PATTERNS));
export const religiousRuleEnum = pgEnum("religious_rule", tuple(RELIGIOUS_RULES));
export const precisionModeEnum = pgEnum("precision_mode", tuple(PRECISION_MODES));
export const allergenEnum = pgEnum("allergen", tuple(ALLERGENS));
export const consentKindEnum = pgEnum("consent_kind", tuple(CONSENT_KINDS));
export const consentStatusEnum = pgEnum("consent_status", tuple(CONSENT_STATUSES));
export const householdRoleEnum = pgEnum("household_role", tuple(HOUSEHOLD_ROLES));
export const storageLocationTypeEnum = pgEnum(
"storage_location_type",
tuple(STORAGE_LOCATION_TYPES),
);
export const unitEnum = pgEnum("unit", tuple(UNITS));
export const inventorySourceEnum = pgEnum("inventory_source", tuple(INVENTORY_SOURCES));
export const inventoryTransactionTypeEnum = pgEnum(
"inventory_transaction_type",
tuple(INVENTORY_TRANSACTION_TYPES),
);
export const expiryStatusEnum = pgEnum("expiry_status", tuple(EXPIRY_STATUSES));
export const dateKindEnum = pgEnum("date_kind", tuple(DATE_KINDS));
export const cuisineEnum = pgEnum("cuisine", tuple(CUISINES));
export const mealTypeEnum = pgEnum("meal_type", tuple(MEAL_TYPES));
export const cookingMethodEnum = pgEnum("cooking_method", tuple(COOKING_METHODS));
export const recipeDifficultyEnum = pgEnum("recipe_difficulty", tuple(RECIPE_DIFFICULTIES));
export const recipeStatusEnum = pgEnum("recipe_status", tuple(RECIPE_STATUSES));
export const recipeVerificationStatusEnum = pgEnum(
"recipe_verification_status",
tuple(RECIPE_VERIFICATION_STATUSES),
);
export const recipeVariantTypeEnum = pgEnum("recipe_variant_type", tuple(RECIPE_VARIANT_TYPES));
export const recipeSourceTypeEnum = pgEnum("recipe_source_type", tuple(RECIPE_SOURCE_TYPES));
export const recipeSimilarityClassEnum = pgEnum(
"recipe_similarity_class",
tuple(RECIPE_SIMILARITY_CLASSES),
);
export const scanTypeEnum = pgEnum("scan_type", tuple(SCAN_TYPES));
export const jobTypeEnum = pgEnum("job_type", tuple(JOB_TYPES));
export const jobStatusEnum = pgEnum("job_status", tuple(JOB_STATUSES));
export const eventTypeEnum = pgEnum("event_type", tuple(EVENT_TYPES));
export const mealLogSourceEnum = pgEnum("meal_log_source", tuple(MEAL_LOG_SOURCES));
export const memoryKindEnum = pgEnum("memory_kind", tuple(MEMORY_KINDS));
export const signalOriginEnum = pgEnum("signal_origin", tuple(SIGNAL_ORIGINS));
export const tasteAxisEnum = pgEnum("taste_axis", tuple(TASTE_AXES));
export const subscriptionPlanEnum = pgEnum("subscription_plan", tuple(SUBSCRIPTION_PLANS));
export const subscriptionStatusEnum = pgEnum("subscription_status", tuple(SUBSCRIPTION_STATUSES));
export const subscriptionProviderEnum = pgEnum(
"subscription_provider",
tuple(SUBSCRIPTION_PROVIDERS),
);
export const creatorLevelEnum = pgEnum("creator_level", tuple(CREATOR_LEVELS));
export const profileVisibilityEnum = pgEnum("profile_visibility", tuple(PROFILE_VISIBILITIES));
export const notificationTypeEnum = pgEnum("notification_type", tuple(NOTIFICATION_TYPES));
export const verificationStatusEnum = pgEnum("verification_status", tuple(VERIFICATION_STATUSES));