Clean file architecture

This commit is contained in:
MartinBraquet
2025-09-12 20:47:37 +02:00
parent 880cb08c3d
commit 1daf771218
5 changed files with 11 additions and 799 deletions

View File

@@ -8,5 +8,5 @@
## Reporting a Vulnerability
Contact the development team to report a vulnerability. You should receive updates within a week.
Contact the development team at compass.meet.info@gmail.com to report a vulnerability. You should receive updates within a week.

View File

@@ -4,7 +4,13 @@ set -e
cd "$(dirname "$0")"
rm -rf node_modules web/node_modules backend/api/node_modules backend/email/node_modules command/node_modules backend/shared/node_modules
rm -rf \
node_modules \
web/node_modules \
backend/api/node_modules \
backend/email/node_modules \
command/node_modules \
backend/shared/node_modules
yarn install

View File

View File

@@ -1,3 +1,6 @@
# Description: Automated setup script for OpenTofu, Docker, and Yarn on Linux and macOS
# If it fails, please help us improve it by creating an issue or a PR. Otherwise, you can install them manually.
#!/usr/bin/env bash
set -e

View File

@@ -1,797 +0,0 @@
import {
createClient as createClientGeneric,
SupabaseClient as SupabaseClientGeneric,
SupabaseClientOptions as SupabaseClientOptionsGeneric,
} from '@supabase/supabase-js'
export type Json =
| string
| number
| boolean
| null
| { [key: string]: Json | undefined }
| Json[]
export type Database = {
public: {
Tables: {
love_answers: {
Row: {
created_time: string
creator_id: string
free_response: string | null
id: number
integer: number | null
multiple_choice: number | null
question_id: number
}
Insert: {
created_time?: string
creator_id: string
free_response?: string | null
id?: never
integer?: number | null
multiple_choice?: number | null
question_id: number
}
Update: {
created_time?: string
creator_id?: string
free_response?: string | null
id?: never
integer?: number | null
multiple_choice?: number | null
question_id?: number
}
Relationships: []
}
love_compatibility_answers: {
Row: {
created_time: string
creator_id: string
explanation: string | null
id: number
importance: number
multiple_choice: number
pref_choices: number[]
question_id: number
}
Insert: {
created_time?: string
creator_id: string
explanation?: string | null
id?: never
importance: number
multiple_choice: number
pref_choices: number[]
question_id: number
}
Update: {
created_time?: string
creator_id?: string
explanation?: string | null
id?: never
importance?: number
multiple_choice?: number
pref_choices?: number[]
question_id?: number
}
Relationships: []
}
love_likes: {
Row: {
created_time: string
creator_id: string
like_id: string
target_id: string
}
Insert: {
created_time?: string
creator_id: string
like_id?: string
target_id: string
}
Update: {
created_time?: string
creator_id?: string
like_id?: string
target_id?: string
}
Relationships: []
}
love_questions: {
Row: {
answer_type: string
created_time: string
creator_id: string
id: number
importance_score: number
multiple_choice_options: Json | null
question: string
}
Insert: {
answer_type?: string
created_time?: string
creator_id: string
id?: never
importance_score?: number
multiple_choice_options?: Json | null
question: string
}
Update: {
answer_type?: string
created_time?: string
creator_id?: string
id?: never
importance_score?: number
multiple_choice_options?: Json | null
question?: string
}
Relationships: []
}
love_ships: {
Row: {
created_time: string
creator_id: string
ship_id: string
target1_id: string
target2_id: string
}
Insert: {
created_time?: string
creator_id: string
ship_id?: string
target1_id: string
target2_id: string
}
Update: {
created_time?: string
creator_id?: string
ship_id?: string
target1_id?: string
target2_id?: string
}
Relationships: []
}
love_stars: {
Row: {
created_time: string
creator_id: string
star_id: string
target_id: string
}
Insert: {
created_time?: string
creator_id: string
star_id?: string
target_id: string
}
Update: {
created_time?: string
creator_id?: string
star_id?: string
target_id?: string
}
Relationships: []
}
love_waitlist: {
Row: {
created_time: string
email: string
id: number
}
Insert: {
created_time?: string
email: string
id?: never
}
Update: {
created_time?: string
email?: string
id?: never
}
Relationships: []
}
lover_comments: {
Row: {
content: Json
created_time: string
hidden: boolean
id: number
on_user_id: string
reply_to_comment_id: number | null
user_avatar_url: string
user_id: string
user_name: string
user_username: string
}
Insert: {
content: Json
created_time?: string
hidden?: boolean
id?: never
on_user_id: string
reply_to_comment_id?: number | null
user_avatar_url: string
user_id: string
user_name: string
user_username: string
}
Update: {
content?: Json
created_time?: string
hidden?: boolean
id?: never
on_user_id?: string
reply_to_comment_id?: number | null
user_avatar_url?: string
user_id?: string
user_name?: string
user_username?: string
}
Relationships: []
}
lovers: {
Row: {
age: number
bio: Json | null
born_in_location: string | null
city: string
city_latitude: number | null
city_longitude: number | null
comments_enabled: boolean
company: string | null
country: string | null
created_time: string
drinks_per_month: number | null
education_level: string | null
ethnicity: string[] | null
gender: string
geodb_city_id: string | null
has_kids: number | null
height_in_inches: number | null
id: number
is_smoker: boolean | null
is_vegetarian_or_vegan: boolean | null
last_online_time: string
looking_for_matches: boolean
messaging_status: string
occupation: string | null
occupation_title: string | null
photo_urls: string[] | null
pinned_url: string | null
political_beliefs: string[] | null
pref_age_max: number
pref_age_min: number
pref_gender: string[]
pref_relation_styles: string[]
referred_by_username: string | null
region_code: string | null
religious_belief_strength: number | null
religious_beliefs: string | null
twitter: string | null
university: string | null
user_id: string
visibility: Database['public']['Enums']['lover_visibility']
wants_kids_strength: number
website: string | null
}
Insert: {
age?: number
bio?: Json | null
born_in_location?: string | null
city: string
city_latitude?: number | null
city_longitude?: number | null
comments_enabled?: boolean
company?: string | null
country?: string | null
created_time?: string
drinks_per_month?: number | null
education_level?: string | null
ethnicity?: string[] | null
gender: string
geodb_city_id?: string | null
has_kids?: number | null
height_in_inches?: number | null
id?: never
is_smoker?: boolean | null
is_vegetarian_or_vegan?: boolean | null
last_online_time?: string
looking_for_matches?: boolean
messaging_status?: string
occupation?: string | null
occupation_title?: string | null
photo_urls?: string[] | null
pinned_url?: string | null
political_beliefs?: string[] | null
pref_age_max?: number
pref_age_min?: number
pref_gender: string[]
pref_relation_styles: string[]
referred_by_username?: string | null
region_code?: string | null
religious_belief_strength?: number | null
religious_beliefs?: string | null
twitter?: string | null
university?: string | null
user_id: string
visibility?: Database['public']['Enums']['lover_visibility']
wants_kids_strength?: number
website?: string | null
}
Update: {
age?: number
bio?: Json | null
born_in_location?: string | null
city?: string
city_latitude?: number | null
city_longitude?: number | null
comments_enabled?: boolean
company?: string | null
country?: string | null
created_time?: string
drinks_per_month?: number | null
education_level?: string | null
ethnicity?: string[] | null
gender?: string
geodb_city_id?: string | null
has_kids?: number | null
height_in_inches?: number | null
id?: never
is_smoker?: boolean | null
is_vegetarian_or_vegan?: boolean | null
last_online_time?: string
looking_for_matches?: boolean
messaging_status?: string
occupation?: string | null
occupation_title?: string | null
photo_urls?: string[] | null
pinned_url?: string | null
political_beliefs?: string[] | null
pref_age_max?: number
pref_age_min?: number
pref_gender?: string[]
pref_relation_styles?: string[]
referred_by_username?: string | null
region_code?: string | null
religious_belief_strength?: number | null
religious_beliefs?: string | null
twitter?: string | null
university?: string | null
user_id?: string
visibility?: Database['public']['Enums']['lover_visibility']
wants_kids_strength?: number
website?: string | null
}
Relationships: []
}
private_user_message_channel_members: {
Row: {
channel_id: number
created_time: string
id: number
notify_after_time: string
role: string
status: string
user_id: string
}
Insert: {
channel_id: number
created_time?: string
id?: never
notify_after_time?: string
role?: string
status?: string
user_id: string
}
Update: {
channel_id?: number
created_time?: string
id?: never
notify_after_time?: string
role?: string
status?: string
user_id?: string
}
Relationships: [
{
foreignKeyName: 'channel_id_fkey'
columns: ['channel_id']
isOneToOne: false
referencedRelation: 'private_user_message_channels'
referencedColumns: ['id']
}
]
}
private_user_message_channels: {
Row: {
created_time: string
id: number
last_updated_time: string
title: string | null
}
Insert: {
created_time?: string
id?: never
last_updated_time?: string
title?: string | null
}
Update: {
created_time?: string
id?: never
last_updated_time?: string
title?: string | null
}
Relationships: []
}
private_user_messages: {
Row: {
channel_id: number
content: Json
created_time: string
id: number
old_id: number | null
user_id: string
visibility: string
}
Insert: {
channel_id: number
content: Json
created_time?: string
id?: never
old_id?: number | null
user_id: string
visibility?: string
}
Update: {
channel_id?: number
content?: Json
created_time?: string
id?: never
old_id?: number | null
user_id?: string
visibility?: string
}
Relationships: [
{
foreignKeyName: 'private_user_messages_channel_id_fkey'
columns: ['channel_id']
isOneToOne: false
referencedRelation: 'private_user_message_channels'
referencedColumns: ['id']
}
]
}
private_user_seen_message_channels: {
Row: {
channel_id: number
created_time: string
id: number
user_id: string
}
Insert: {
channel_id: number
created_time?: string
id?: never
user_id: string
}
Update: {
channel_id?: number
created_time?: string
id?: never
user_id?: string
}
Relationships: [
{
foreignKeyName: 'channel_id_fkey'
columns: ['channel_id']
isOneToOne: false
referencedRelation: 'private_user_message_channels'
referencedColumns: ['id']
}
]
}
private_users: {
Row: {
data: Json
id: string
}
Insert: {
data: Json
id: string
}
Update: {
data?: Json
id?: string
}
Relationships: []
}
reports: {
Row: {
content_id: string
content_owner_id: string
content_type: string
created_time: string | null
description: string | null
id: string
parent_id: string | null
parent_type: string | null
user_id: string
}
Insert: {
content_id: string
content_owner_id: string
content_type: string
created_time?: string | null
description?: string | null
id?: string
parent_id?: string | null
parent_type?: string | null
user_id: string
}
Update: {
content_id?: string
content_owner_id?: string
content_type?: string
created_time?: string | null
description?: string | null
id?: string
parent_id?: string | null
parent_type?: string | null
user_id?: string
}
Relationships: [
{
foreignKeyName: 'reports_content_owner_id_fkey'
columns: ['content_owner_id']
isOneToOne: false
referencedRelation: 'users'
referencedColumns: ['id']
},
{
foreignKeyName: 'reports_user_id_fkey'
columns: ['user_id']
isOneToOne: false
referencedRelation: 'users'
referencedColumns: ['id']
}
]
}
temp_users: {
Row: {
created_time: string | null
id: string | null
name: string | null
private_user_data: Json | null
user_data: Json | null
username: string | null
}
Insert: {
created_time?: string | null
id?: string | null
name?: string | null
private_user_data?: Json | null
user_data?: Json | null
username?: string | null
}
Update: {
created_time?: string | null
id?: string | null
name?: string | null
private_user_data?: Json | null
user_data?: Json | null
username?: string | null
}
Relationships: []
}
user_events: {
Row: {
ad_id: string | null
comment_id: string | null
contract_id: string | null
data: Json
id: number
name: string
ts: string
user_id: string | null
}
Insert: {
ad_id?: string | null
comment_id?: string | null
contract_id?: string | null
data: Json
id?: never
name: string
ts?: string
user_id?: string | null
}
Update: {
ad_id?: string | null
comment_id?: string | null
contract_id?: string | null
data?: Json
id?: never
name?: string
ts?: string
user_id?: string | null
}
Relationships: []
}
user_notifications: {
Row: {
data: Json
notification_id: string
user_id: string
}
Insert: {
data: Json
notification_id: string
user_id: string
}
Update: {
data?: Json
notification_id?: string
user_id?: string
}
Relationships: []
}
users: {
Row: {
created_time: string
data: Json
id: string
name: string
name_username_vector: unknown | null
username: string
}
Insert: {
created_time?: string
data: Json
id?: string
name: string
name_username_vector?: unknown | null
username: string
}
Update: {
created_time?: string
data?: Json
id?: string
name?: string
name_username_vector?: unknown | null
username?: string
}
Relationships: []
}
}
Views: {
[_ in never]: never
}
Functions: {
calculate_earth_distance_km: {
Args: { lat1: number; lon1: number; lat2: number; lon2: number }
Returns: number
}
can_access_private_messages: {
Args: { channel_id: number; user_id: string }
Returns: boolean
}
firebase_uid: {
Args: Record<PropertyKey, never>
Returns: string
}
get_average_rating: {
Args: { user_id: string }
Returns: number
}
get_compatibility_questions_with_answer_count: {
Args: Record<PropertyKey, never>
Returns: Record<string, unknown>[]
}
get_love_question_answers_and_lovers: {
Args: { p_question_id: number }
Returns: Record<string, unknown>[]
}
is_admin: {
Args: Record<PropertyKey, never> | { user_id: string }
Returns: boolean
}
millis_interval: {
Args: { start_millis: number; end_millis: number }
Returns: unknown
}
millis_to_ts: {
Args: { millis: number }
Returns: string
}
random_alphanumeric: {
Args: { length: number }
Returns: string
}
to_jsonb: {
Args: { '': Json }
Returns: Json
}
ts_to_millis: {
Args: { ts: string } | { ts: string }
Returns: number
}
}
Enums: {
lover_visibility: 'public' | 'member'
}
CompositeTypes: {
[_ in never]: never
}
}
}
export type Schema = Database['public']
export type SupabaseClient = SupabaseClientGeneric<Database, 'public', Schema>
export function createClient(
instanceId: string,
key: string,
opts?: SupabaseClientOptionsGeneric<'public'>
) {
const url = `https://${instanceId}.supabase.co`
return createClientGeneric(url, key, opts) as SupabaseClient
}
export const ENV_CONFIG = {
domain: 'dev.compassmeet.com',
firebaseConfig: {
apiKey: "AIzaSyAxzhj6bZuZ1TCw9xzibGccRHXiRWq6iy0",
authDomain: "compass-130ba.firebaseapp.com",
projectId: "compass-130ba",
storageBucket: "compass-130ba-public",
messagingSenderId: "253367029065",
appId: "1:253367029065:web:b338785af99d4145095e98",
measurementId: "G-2LSQYJQE6P",
region: 'us-west1',
privateBucket: 'compass-130ba.firebasestorage.app',
},
cloudRunId: 'w3txbmd3ba',
cloudRunRegion: 'uc',
supabaseInstanceId: 'ltzepxnhhnrnvovqblfr',
supabaseAnonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx0emVweG5oaG5ybnZvdnFibGZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTU5NjczNjgsImV4cCI6MjA3MTU0MzM2OH0.pbazcrVOG7Kh_IgblRu2VAfoBe3-xheNfRzAto7xvzY',
apiEndpoint: 'api.dev.compassmeet.com',
adminIds: [
'...',
],
}
export function initSupabaseClient() {
// console.log(
// 'Initializing supabase client',
// ENV_CONFIG.supabaseInstanceId,
// ENV_CONFIG.supabaseAnonKey
// )
return createClient(ENV_CONFIG.supabaseInstanceId, ENV_CONFIG.supabaseAnonKey)
}
export const db = initSupabaseClient()
export const removeUndefinedProps = <T extends object>(obj: T): T => {
const newObj: any = {}
for (const key of Object.keys(obj)) {
if ((obj as any)[key] !== undefined) newObj[key] = (obj as any)[key]
}
return newObj
}
const userId = 'Fpf0JZ1J79MS1dAvYXwyOMnwrHV2'
const commentId = 'abcd'
console.log(db)
const data = db.from('lovers').select('*').eq('user_id', userId)
// const data = db.from('user_events').insert({
// name: 'name_test',
// data: removeUndefinedProps({username: "MartinBraquet"}) as Record<string, Json>,
// // user_id: userId,
// comment_id: undefined,
// })
data.then((d) => console.log(d))