conectar frontend con Turso: puente tauri-db.ts + UsersStore con sync KAPPA↔Turso y campos locales
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
|
||||
export interface AlphaUserRecord {
|
||||
id: number
|
||||
email: string
|
||||
first_name: string
|
||||
last_name: string
|
||||
role: string | null
|
||||
seniority: string | null
|
||||
cell_id: number | null
|
||||
is_active: boolean
|
||||
created_at: string | null
|
||||
}
|
||||
|
||||
export interface CellRecord {
|
||||
id: number
|
||||
name: string
|
||||
description: string | null
|
||||
created_at: string | null
|
||||
}
|
||||
|
||||
export interface ProjectMemberRecord {
|
||||
id: number
|
||||
user_id: number
|
||||
initiative_id: number
|
||||
initiative_name: string | null
|
||||
role: string | null
|
||||
assigned_at: string | null
|
||||
}
|
||||
|
||||
export interface AbsenceRecord {
|
||||
id: number
|
||||
user_id: number
|
||||
start_date: string
|
||||
end_date: string
|
||||
type: string
|
||||
reason: string | null
|
||||
created_at: string | null
|
||||
}
|
||||
|
||||
export interface DailyLogRecord {
|
||||
id: number
|
||||
user_id: number
|
||||
initiative_id: number
|
||||
date: string
|
||||
work_item_id: number | null
|
||||
what_worked_on: string | null
|
||||
progress_pct: number | null
|
||||
impediments: string | null
|
||||
plan_for_tomorrow: string | null
|
||||
hours_spent: number | null
|
||||
created_at: string | null
|
||||
}
|
||||
|
||||
export interface PerformanceRecord {
|
||||
id: number
|
||||
user_id: number
|
||||
initiative_id: number | null
|
||||
period: string
|
||||
planned_sp: number | null
|
||||
completed_sp: number | null
|
||||
planned_hours: number | null
|
||||
actual_hours: number | null
|
||||
velocity: number | null
|
||||
spi: number | null
|
||||
cpi: number | null
|
||||
compliance_pct: number | null
|
||||
impediment_count: number | null
|
||||
calculated_at: string | null
|
||||
}
|
||||
|
||||
export const tauriDb = {
|
||||
// Users
|
||||
getUsers(): Promise<AlphaUserRecord[]> {
|
||||
return invoke('get_users')
|
||||
},
|
||||
saveUser(user: AlphaUserRecord): Promise<number> {
|
||||
return invoke('save_user', { user })
|
||||
},
|
||||
updateUserFields(id: number, role: string | null, seniority: string | null, cell_id: number | null): Promise<void> {
|
||||
return invoke('update_user_fields', { id, role, seniority, cellId: cell_id })
|
||||
},
|
||||
|
||||
// Cells
|
||||
getCells(): Promise<CellRecord[]> {
|
||||
return invoke('get_cells')
|
||||
},
|
||||
saveCell(cell: CellRecord): Promise<number> {
|
||||
return invoke('save_cell', { cell })
|
||||
},
|
||||
|
||||
// Project Members
|
||||
getProjectMembers(userId: number): Promise<ProjectMemberRecord[]> {
|
||||
return invoke('get_project_members', { userId })
|
||||
},
|
||||
saveProjectMembers(userId: number, members: ProjectMemberRecord[]): Promise<void> {
|
||||
return invoke('save_project_members', { userId, members })
|
||||
},
|
||||
|
||||
// Absences
|
||||
getAbsences(userId: number): Promise<AbsenceRecord[]> {
|
||||
return invoke('get_absences', { userId })
|
||||
},
|
||||
saveAbsence(absence: AbsenceRecord): Promise<number> {
|
||||
return invoke('save_absence', { absence })
|
||||
},
|
||||
deleteAbsence(id: number): Promise<void> {
|
||||
return invoke('delete_absence', { id })
|
||||
},
|
||||
|
||||
// Daily Logs
|
||||
getDailyLogs(userId: number, initiativeId?: number): Promise<DailyLogRecord[]> {
|
||||
return invoke('get_daily_logs', { userId, initiativeId: initiativeId ?? null })
|
||||
},
|
||||
saveDailyLog(log: DailyLogRecord): Promise<number> {
|
||||
return invoke('save_daily_log', { log })
|
||||
},
|
||||
|
||||
// Performance
|
||||
getPerformance(userId: number, initiativeId?: number): Promise<PerformanceRecord[]> {
|
||||
return invoke('get_performance', { userId, initiativeId })
|
||||
},
|
||||
savePerformance(snap: PerformanceRecord): Promise<number> {
|
||||
return invoke('save_performance', { snap })
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user