- New VerantwortlicheInvite model: LT-issued invites so a person can register as Gemeinde Verantwortliche(r) for a specific Gemeinde, skipping the self-registration approval step. - Wahl/Workshop/Teilnehmer gain phase support (phasenAnzahl, beschreibung), mirroring the WP plugin's multi-phase elections. Teilnehmer unique constraint now scoped per phase. - Auth: team login + guest auth adjustments, spec coverage. - sync.service.ts: register VerantwortlicheInvite as a synced model. - wahl.service.ts: submitTeilnehmer updated for the new phase-scoped unique key. - client: login/home screen rework, new theme.dart, FCM web tweaks. - .gitignore: ignore .DS_Store. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
22 lines
634 B
TypeScript
22 lines
634 B
TypeScript
import { IsEmail, IsNotEmpty, IsOptional, IsString } from 'class-validator';
|
|
|
|
/// Team login accepts EITHER an email (legacy/personal Verantwortliche
|
|
/// accounts) OR a Gemeinde name (the normal Teamer login path, since a
|
|
/// Teamer thinks of their login as "meine Gemeinde", not their email).
|
|
/// At least one of email/gemeindeName is required; enforced in the
|
|
/// controller rather than a custom validator to keep this DTO simple.
|
|
export class TeamLoginDto {
|
|
@IsOptional()
|
|
@IsEmail()
|
|
email?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
gemeindeName?: string;
|
|
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
password!: string;
|
|
}
|