Auth integration

This commit is contained in:
Wieland, Marc
2026-05-22 10:28:02 +02:00
parent 64c5f6aa2c
commit 7ab824e7c1
39 changed files with 681 additions and 57 deletions
+16 -16
View File
@@ -4,12 +4,12 @@ namespace timetracker.Data;
public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
{
public async Task<List<WorkDay>> GetWeekAsync(DateOnly monday)
public async Task<List<WorkDay>> GetWeekAsync(int userId, DateOnly monday)
{
await using var db = await factory.CreateDbContextAsync();
return await db.WorkDays
.Include(w => w.Breaks)
.Where(w => w.Date >= monday && w.Date < monday.AddDays(7))
.Where(w => w.UserId == userId && w.Date >= monday && w.Date < monday.AddDays(7))
.OrderBy(w => w.Date)
.ToListAsync();
}
@@ -19,7 +19,7 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
await using var db = await factory.CreateDbContextAsync();
var existing = await db.WorkDays
.Include(w => w.Breaks)
.FirstOrDefaultAsync(w => w.Date == workDay.Date);
.FirstOrDefaultAsync(w => w.UserId == workDay.UserId && w.Date == workDay.Date);
if (existing == null)
{
@@ -45,17 +45,17 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
await db.SaveChangesAsync();
}
public async Task<AppSettings> GetSettingsAsync()
public async Task<AppSettings> GetSettingsAsync(int userId)
{
await using var db = await factory.CreateDbContextAsync();
return await db.AppSettings.FindAsync(1) ?? new AppSettings { Id = 1 };
return await db.AppSettings.FirstOrDefaultAsync(s => s.UserId == userId)
?? new AppSettings { UserId = userId };
}
public async Task SaveSettingsAsync(AppSettings settings)
{
await using var db = await factory.CreateDbContextAsync();
settings.Id = 1;
var existing = await db.AppSettings.FindAsync(1);
var existing = await db.AppSettings.FirstOrDefaultAsync(s => s.UserId == settings.UserId);
if (existing == null)
db.AppSettings.Add(settings);
else
@@ -75,11 +75,11 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
}
// ── Urlaub ────────────────────────────────────────────────────────────
public async Task<List<VacationDay>> GetVacationDaysAsync(int year)
public async Task<List<VacationDay>> GetVacationDaysAsync(int userId, int year)
{
await using var db = await factory.CreateDbContextAsync();
return await db.VacationDays
.Where(v => v.Date.Year == year)
.Where(v => v.UserId == userId && v.Date.Year == year)
.OrderBy(v => v.Date)
.ToListAsync();
}
@@ -87,7 +87,7 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
public async Task AddVacationDayAsync(VacationDay vacationDay)
{
await using var db = await factory.CreateDbContextAsync();
var exists = await db.VacationDays.AnyAsync(v => v.Date == vacationDay.Date);
var exists = await db.VacationDays.AnyAsync(v => v.UserId == vacationDay.UserId && v.Date == vacationDay.Date);
if (!exists)
{
vacationDay.Id = 0;
@@ -96,10 +96,10 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
}
}
public async Task RemoveVacationDayAsync(int id)
public async Task RemoveVacationDayAsync(int userId, int id)
{
await using var db = await factory.CreateDbContextAsync();
var v = await db.VacationDays.FindAsync(id);
var v = await db.VacationDays.FirstOrDefaultAsync(v => v.Id == id && v.UserId == userId);
if (v != null)
{
db.VacationDays.Remove(v);
@@ -108,12 +108,12 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
}
// ── Gleitzeitkonto ───────────────────────────────────────────────────
public async Task<TimeSpan> GetTotalOvertimeAsync(AppSettings settings)
public async Task<TimeSpan> GetTotalOvertimeAsync(int userId, AppSettings settings)
{
await using var db = await factory.CreateDbContextAsync();
var allDays = await db.WorkDays
.Include(w => w.Breaks)
.Where(w => w.StartTime != null && w.EndTime != null)
.Where(w => w.UserId == userId && w.StartTime != null && w.EndTime != null)
.ToListAsync();
var total = TimeSpan.Zero;
@@ -132,14 +132,14 @@ public class TimetrackerService(IDbContextFactory<TimetrackerDbContext> factory)
}
// ── Monatsübersicht ───────────────────────────────────────────────────
public async Task<List<WorkDay>> GetMonthAsync(int year, int month)
public async Task<List<WorkDay>> GetMonthAsync(int userId, int year, int month)
{
await using var db = await factory.CreateDbContextAsync();
var from = new DateOnly(year, month, 1);
var to = from.AddMonths(1);
return await db.WorkDays
.Include(w => w.Breaks)
.Where(w => w.Date >= from && w.Date < to)
.Where(w => w.UserId == userId && w.Date >= from && w.Date < to)
.OrderBy(w => w.Date)
.ToListAsync();
}