feat: enable Fischerei, Sitzungsprotokolle, Verbandsverwaltung modules
- Enable all 3 modules via NEXT_PUBLIC_ENABLE_* build args + runtime env - Fix empty-string-to-null for date/optional columns in all module APIs: fischerei (24 fixes), verbandsverwaltung (15 fixes), sitzungsprotokolle (2 fixes) - CACHE_BUST=12 for full rebuild with new feature flags
This commit is contained in:
@@ -5,7 +5,7 @@ WORKDIR /app
|
|||||||
# --- Install + Build in one stage ---
|
# --- Install + Build in one stage ---
|
||||||
FROM base AS builder
|
FROM base AS builder
|
||||||
# CACHE_BUST: change this value to force a full rebuild (busts Docker layer cache)
|
# CACHE_BUST: change this value to force a full rebuild (busts Docker layer cache)
|
||||||
ARG CACHE_BUST=11
|
ARG CACHE_BUST=12
|
||||||
RUN echo "Cache bust: ${CACHE_BUST}"
|
RUN echo "Cache bust: ${CACHE_BUST}"
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN pnpm install --no-frozen-lockfile
|
RUN pnpm install --no-frozen-lockfile
|
||||||
@@ -17,10 +17,16 @@ ARG NEXT_PUBLIC_SITE_URL=https://myeasycms.de
|
|||||||
ARG NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
|
ARG NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
|
||||||
ARG NEXT_PUBLIC_SUPABASE_PUBLIC_KEY
|
ARG NEXT_PUBLIC_SUPABASE_PUBLIC_KEY
|
||||||
ARG NEXT_PUBLIC_DEFAULT_LOCALE=de
|
ARG NEXT_PUBLIC_DEFAULT_LOCALE=de
|
||||||
|
ARG NEXT_PUBLIC_ENABLE_FISCHEREI=true
|
||||||
|
ARG NEXT_PUBLIC_ENABLE_MEETING_PROTOCOLS=true
|
||||||
|
ARG NEXT_PUBLIC_ENABLE_VERBANDSVERWALTUNG=true
|
||||||
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
|
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
|
||||||
ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
|
ENV NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL}
|
||||||
ENV NEXT_PUBLIC_SUPABASE_PUBLIC_KEY=${NEXT_PUBLIC_SUPABASE_PUBLIC_KEY}
|
ENV NEXT_PUBLIC_SUPABASE_PUBLIC_KEY=${NEXT_PUBLIC_SUPABASE_PUBLIC_KEY}
|
||||||
ENV NEXT_PUBLIC_DEFAULT_LOCALE=${NEXT_PUBLIC_DEFAULT_LOCALE}
|
ENV NEXT_PUBLIC_DEFAULT_LOCALE=${NEXT_PUBLIC_DEFAULT_LOCALE}
|
||||||
|
ENV NEXT_PUBLIC_ENABLE_FISCHEREI=${NEXT_PUBLIC_ENABLE_FISCHEREI}
|
||||||
|
ENV NEXT_PUBLIC_ENABLE_MEETING_PROTOCOLS=${NEXT_PUBLIC_ENABLE_MEETING_PROTOCOLS}
|
||||||
|
ENV NEXT_PUBLIC_ENABLE_VERBANDSVERWALTUNG=${NEXT_PUBLIC_ENABLE_VERBANDSVERWALTUNG}
|
||||||
RUN pnpm --filter web build
|
RUN pnpm --filter web build
|
||||||
|
|
||||||
# --- Run ---
|
# --- Run ---
|
||||||
|
|||||||
@@ -335,6 +335,9 @@ services:
|
|||||||
NEXT_PUBLIC_ENABLE_TEAM_ACCOUNTS_BILLING: "false"
|
NEXT_PUBLIC_ENABLE_TEAM_ACCOUNTS_BILLING: "false"
|
||||||
NEXT_PUBLIC_ENABLE_PERSONAL_ACCOUNT_BILLING: "false"
|
NEXT_PUBLIC_ENABLE_PERSONAL_ACCOUNT_BILLING: "false"
|
||||||
NEXT_PUBLIC_ENABLE_NOTIFICATIONS: "true"
|
NEXT_PUBLIC_ENABLE_NOTIFICATIONS: "true"
|
||||||
|
NEXT_PUBLIC_ENABLE_FISCHEREI: "true"
|
||||||
|
NEXT_PUBLIC_ENABLE_MEETING_PROTOCOLS: "true"
|
||||||
|
NEXT_PUBLIC_ENABLE_VERBANDSVERWALTUNG: "true"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
supabase-db-data:
|
supabase-db-data:
|
||||||
|
|||||||
@@ -97,18 +97,18 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
short_name: input.shortName,
|
short_name: input.shortName || null,
|
||||||
water_type: input.waterType,
|
water_type: input.waterType,
|
||||||
description: input.description,
|
description: input.description || null,
|
||||||
surface_area_ha: input.surfaceAreaHa,
|
surface_area_ha: input.surfaceAreaHa,
|
||||||
length_m: input.lengthM,
|
length_m: input.lengthM,
|
||||||
width_m: input.widthM,
|
width_m: input.widthM,
|
||||||
avg_depth_m: input.avgDepthM,
|
avg_depth_m: input.avgDepthM,
|
||||||
max_depth_m: input.maxDepthM,
|
max_depth_m: input.maxDepthM,
|
||||||
outflow: input.outflow,
|
outflow: input.outflow || null,
|
||||||
location: input.location,
|
location: input.location || null,
|
||||||
classification_order: input.classificationOrder,
|
classification_order: input.classificationOrder,
|
||||||
county: input.county,
|
county: input.county || null,
|
||||||
geo_lat: input.geoLat,
|
geo_lat: input.geoLat,
|
||||||
geo_lng: input.geoLng,
|
geo_lng: input.geoLng,
|
||||||
lfv_number: input.lfvNumber,
|
lfv_number: input.lfvNumber,
|
||||||
@@ -290,17 +290,17 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
name_latin: input.nameLatin,
|
name_latin: input.nameLatin || null,
|
||||||
name_local: input.nameLocal,
|
name_local: input.nameLocal || null,
|
||||||
is_active: input.isActive,
|
is_active: input.isActive,
|
||||||
max_age_years: input.maxAgeYears,
|
max_age_years: input.maxAgeYears,
|
||||||
max_weight_kg: input.maxWeightKg,
|
max_weight_kg: input.maxWeightKg,
|
||||||
max_length_cm: input.maxLengthCm,
|
max_length_cm: input.maxLengthCm,
|
||||||
protected_min_size_cm: input.protectedMinSizeCm,
|
protected_min_size_cm: input.protectedMinSizeCm,
|
||||||
protection_period_start: input.protectionPeriodStart,
|
protection_period_start: input.protectionPeriodStart || null,
|
||||||
protection_period_end: input.protectionPeriodEnd,
|
protection_period_end: input.protectionPeriodEnd || null,
|
||||||
spawning_season_start: input.spawningSeasonStart,
|
spawning_season_start: input.spawningSeasonStart || null,
|
||||||
spawning_season_end: input.spawningSeasonEnd,
|
spawning_season_end: input.spawningSeasonEnd || null,
|
||||||
has_special_spawning_season: input.hasSpecialSpawningSeason,
|
has_special_spawning_season: input.hasSpecialSpawningSeason,
|
||||||
k_factor_avg: input.kFactorAvg,
|
k_factor_avg: input.kFactorAvg,
|
||||||
k_factor_min: input.kFactorMin,
|
k_factor_min: input.kFactorMin,
|
||||||
@@ -401,8 +401,8 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
water_id: input.waterId,
|
water_id: input.waterId,
|
||||||
species_id: input.speciesId,
|
species_id: input.speciesId,
|
||||||
min_size_cm: input.minSizeCm,
|
min_size_cm: input.minSizeCm,
|
||||||
protection_period_start: input.protectionPeriodStart,
|
protection_period_start: input.protectionPeriodStart || null,
|
||||||
protection_period_end: input.protectionPeriodEnd,
|
protection_period_end: input.protectionPeriodEnd || null,
|
||||||
max_catch_per_day: input.maxCatchPerDay,
|
max_catch_per_day: input.maxCatchPerDay,
|
||||||
max_catch_per_year: input.maxCatchPerYear,
|
max_catch_per_year: input.maxCatchPerYear,
|
||||||
},
|
},
|
||||||
@@ -473,13 +473,13 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
water_id: input.waterId,
|
water_id: input.waterId,
|
||||||
species_id: input.speciesId,
|
species_id: input.speciesId,
|
||||||
stocking_date: input.stockingDate,
|
stocking_date: input.stockingDate || null,
|
||||||
quantity: input.quantity,
|
quantity: input.quantity,
|
||||||
weight_kg: input.weightKg,
|
weight_kg: input.weightKg,
|
||||||
age_class: input.ageClass,
|
age_class: input.ageClass,
|
||||||
cost_euros: input.costEuros,
|
cost_euros: input.costEuros,
|
||||||
supplier_id: input.supplierId,
|
supplier_id: input.supplierId,
|
||||||
remarks: input.remarks,
|
remarks: input.remarks || null,
|
||||||
created_by: userId,
|
created_by: userId,
|
||||||
updated_by: userId,
|
updated_by: userId,
|
||||||
})
|
})
|
||||||
@@ -582,11 +582,11 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
water_id: input.waterId,
|
water_id: input.waterId,
|
||||||
lessor_name: input.lessorName,
|
lessor_name: input.lessorName,
|
||||||
lessor_address: input.lessorAddress,
|
lessor_address: input.lessorAddress || null,
|
||||||
lessor_phone: input.lessorPhone,
|
lessor_phone: input.lessorPhone || null,
|
||||||
lessor_email: input.lessorEmail,
|
lessor_email: input.lessorEmail || null,
|
||||||
start_date: input.startDate,
|
start_date: input.startDate || null,
|
||||||
end_date: input.endDate,
|
end_date: input.endDate || null,
|
||||||
duration_years: input.durationYears,
|
duration_years: input.durationYears,
|
||||||
initial_amount: input.initialAmount,
|
initial_amount: input.initialAmount,
|
||||||
fixed_annual_increase: input.fixedAnnualIncrease,
|
fixed_annual_increase: input.fixedAnnualIncrease,
|
||||||
@@ -721,14 +721,14 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
member_id: input.memberId,
|
member_id: input.memberId,
|
||||||
year: input.year,
|
year: input.year,
|
||||||
member_name: input.memberName,
|
member_name: input.memberName,
|
||||||
member_birth_date: input.memberBirthDate,
|
member_birth_date: input.memberBirthDate || null,
|
||||||
fishing_days_count: input.fishingDaysCount,
|
fishing_days_count: input.fishingDaysCount,
|
||||||
card_numbers: input.cardNumbers,
|
card_numbers: input.cardNumbers,
|
||||||
is_fly_fisher: input.isFlyFisher,
|
is_fly_fisher: input.isFlyFisher,
|
||||||
is_hejfish: input.isHejfish,
|
is_hejfish: input.isHejfish,
|
||||||
is_empty: input.isEmpty,
|
is_empty: input.isEmpty,
|
||||||
not_fished: input.notFished,
|
not_fished: input.notFished,
|
||||||
remarks: input.remarks,
|
remarks: input.remarks || null,
|
||||||
created_by: userId,
|
created_by: userId,
|
||||||
updated_by: userId,
|
updated_by: userId,
|
||||||
})
|
})
|
||||||
@@ -852,7 +852,7 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
species_id: input.speciesId,
|
species_id: input.speciesId,
|
||||||
water_id: input.waterId,
|
water_id: input.waterId,
|
||||||
member_id: input.memberId,
|
member_id: input.memberId,
|
||||||
catch_date: input.catchDate,
|
catch_date: input.catchDate || null,
|
||||||
quantity: input.quantity,
|
quantity: input.quantity,
|
||||||
length_cm: input.lengthCm,
|
length_cm: input.lengthCm,
|
||||||
weight_g: input.weightG,
|
weight_g: input.weightG,
|
||||||
@@ -864,7 +864,7 @@ export function createFischereiApi(client: SupabaseClient<Database>) {
|
|||||||
competition_id: input.competitionId,
|
competition_id: input.competitionId,
|
||||||
competition_participant_id: input.competitionParticipantId,
|
competition_participant_id: input.competitionParticipantId,
|
||||||
permit_id: input.permitId,
|
permit_id: input.permitId,
|
||||||
remarks: input.remarks,
|
remarks: input.remarks || null,
|
||||||
})
|
})
|
||||||
.select()
|
.select()
|
||||||
.single();
|
.single();
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ export function createMeetingsApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
title: input.title,
|
title: input.title,
|
||||||
meeting_date: input.meetingDate,
|
meeting_date: input.meetingDate || null,
|
||||||
meeting_type: input.meetingType,
|
meeting_type: input.meetingType,
|
||||||
location: input.location,
|
location: input.location || null,
|
||||||
attendees: input.attendees,
|
attendees: input.attendees,
|
||||||
remarks: input.remarks,
|
remarks: input.remarks,
|
||||||
is_published: input.isPublished,
|
is_published: input.isPublished,
|
||||||
|
|||||||
@@ -83,19 +83,19 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
short_name: input.shortName,
|
short_name: input.shortName || null,
|
||||||
association_type_id: input.associationTypeId,
|
association_type_id: input.associationTypeId,
|
||||||
member_count: input.memberCount,
|
member_count: input.memberCount,
|
||||||
founded_year: input.foundedYear,
|
founded_year: input.foundedYear,
|
||||||
street: input.street,
|
street: input.street,
|
||||||
zip: input.zip,
|
zip: input.zip,
|
||||||
city: input.city,
|
city: input.city,
|
||||||
phone: input.phone,
|
phone: input.phone || null,
|
||||||
email: input.email,
|
email: input.email || null,
|
||||||
website: input.website,
|
website: input.website || null,
|
||||||
iban: input.iban,
|
iban: input.iban || null,
|
||||||
bic: input.bic,
|
bic: input.bic || null,
|
||||||
account_holder: input.accountHolder,
|
account_holder: input.accountHolder || null,
|
||||||
is_archived: input.isArchived,
|
is_archived: input.isArchived,
|
||||||
created_by: userId,
|
created_by: userId,
|
||||||
updated_by: userId,
|
updated_by: userId,
|
||||||
@@ -206,8 +206,8 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
first_name: input.firstName,
|
first_name: input.firstName,
|
||||||
last_name: input.lastName,
|
last_name: input.lastName,
|
||||||
role: input.role,
|
role: input.role,
|
||||||
phone: input.phone,
|
phone: input.phone || null,
|
||||||
email: input.email,
|
email: input.email || null,
|
||||||
is_primary: input.isPrimary,
|
is_primary: input.isPrimary,
|
||||||
})
|
})
|
||||||
.select()
|
.select()
|
||||||
@@ -265,7 +265,7 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
description: input.description,
|
description: input.description || null,
|
||||||
sort_order: input.sortOrder,
|
sort_order: input.sortOrder,
|
||||||
})
|
})
|
||||||
.select()
|
.select()
|
||||||
@@ -319,7 +319,7 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
description: input.description,
|
description: input.description || null,
|
||||||
sort_order: input.sortOrder,
|
sort_order: input.sortOrder,
|
||||||
})
|
})
|
||||||
.select()
|
.select()
|
||||||
@@ -373,7 +373,7 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
.insert({
|
.insert({
|
||||||
account_id: input.accountId,
|
account_id: input.accountId,
|
||||||
name: input.name,
|
name: input.name,
|
||||||
description: input.description,
|
description: input.description || null,
|
||||||
default_amount: input.defaultAmount,
|
default_amount: input.defaultAmount,
|
||||||
is_active: input.isActive,
|
is_active: input.isActive,
|
||||||
})
|
})
|
||||||
@@ -462,8 +462,8 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
fee_type_id: input.feeTypeId,
|
fee_type_id: input.feeTypeId,
|
||||||
year: input.year,
|
year: input.year,
|
||||||
amount: input.amount,
|
amount: input.amount,
|
||||||
due_date: input.dueDate,
|
due_date: input.dueDate || null,
|
||||||
paid_date: input.paidDate,
|
paid_date: input.paidDate || null,
|
||||||
payment_method: input.paymentMethod,
|
payment_method: input.paymentMethod,
|
||||||
status: input.status,
|
status: input.status,
|
||||||
notes: input.notes,
|
notes: input.notes,
|
||||||
@@ -527,7 +527,7 @@ export function createVerbandApi(client: SupabaseClient<Database>) {
|
|||||||
title: input.title,
|
title: input.title,
|
||||||
content: input.content,
|
content: input.content,
|
||||||
note_type: input.noteType,
|
note_type: input.noteType,
|
||||||
due_date: input.dueDate,
|
due_date: input.dueDate || null,
|
||||||
is_completed: input.isCompleted,
|
is_completed: input.isCompleted,
|
||||||
})
|
})
|
||||||
.select()
|
.select()
|
||||||
|
|||||||
Reference in New Issue
Block a user