Update Kotlin models and iOS Swift to align with new Go API format

- Update all Kotlin API models to match Go API response structures
- Fix Swift type aliases (TaskDetail→TaskResponse, Residence→ResidenceResponse, etc.)
- Update TaskCompletionCreateRequest to simplified Go API format (taskId, notes, actualCost, photoUrl)
- Fix optional handling for frequency, priority, category, status in task models
- Replace isPrimaryOwner with ownerId comparison against current user
- Update ResidenceUsersResponse to use owner.id instead of ownerId
- Fix non-optional String fields to use isEmpty checks instead of optional binding
- Add type aliases for backwards compatibility in Kotlin models

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-11-27 11:03:00 -06:00
parent d3e77326aa
commit 60c824447d
48 changed files with 923 additions and 846 deletions

View File

@@ -15,9 +15,9 @@ struct ResidenceDetailView: View {
@State private var showEditResidence = false
@State private var showEditTask = false
@State private var showManageUsers = false
@State private var selectedTaskForEdit: TaskDetail?
@State private var selectedTaskForComplete: TaskDetail?
@State private var selectedTaskForArchive: TaskDetail?
@State private var selectedTaskForEdit: TaskResponse?
@State private var selectedTaskForComplete: TaskResponse?
@State private var selectedTaskForArchive: TaskResponse?
@State private var showArchiveConfirmation = false
@State private var hasAppeared = false
@@ -29,7 +29,15 @@ struct ResidenceDetailView: View {
@StateObject private var subscriptionCache = SubscriptionCacheWrapper.shared
@Environment(\.dismiss) private var dismiss
// Check if current user is the owner of the residence
private func isCurrentUserOwner(of residence: ResidenceResponse) -> Bool {
guard let currentUser = ComposeApp.DataCache.shared.currentUser.value else {
return false
}
return Int(residence.ownerId) == Int(currentUser.id)
}
var body: some View {
ZStack {
Color.appBackgroundPrimary
@@ -100,7 +108,7 @@ struct ResidenceDetailView: View {
ManageUsersView(
residenceId: residence.id,
residenceName: residence.name,
isPrimaryOwner: residence.isPrimaryOwner
isPrimaryOwner: isCurrentUserOwner(of: residence)
)
}
}
@@ -184,7 +192,7 @@ private extension ResidenceDetailView {
}
@ViewBuilder
func contentView(for residence: Residence) -> some View {
func contentView(for residence: ResidenceResponse) -> some View {
ScrollView {
VStack(spacing: 16) {
PropertyHeaderCard(residence: residence)
@@ -251,7 +259,7 @@ private extension ResidenceDetailView {
.disabled(viewModel.isGeneratingReport)
}
if let residence = viewModel.selectedResidence, residence.isPrimaryOwner {
if let residence = viewModel.selectedResidence, isCurrentUserOwner(of: residence) {
Button {
showManageUsers = true
} label: {
@@ -272,7 +280,7 @@ private extension ResidenceDetailView {
}
.accessibilityIdentifier(AccessibilityIdentifiers.Task.addButton)
if let residence = viewModel.selectedResidence, residence.isPrimaryOwner {
if let residence = viewModel.selectedResidence, isCurrentUserOwner(of: residence) {
Button {
showDeleteConfirmation = true
} label: {
@@ -363,9 +371,9 @@ private struct TasksSectionContainer: View {
let tasksResponse: TaskColumnsResponse
@ObservedObject var taskViewModel: TaskViewModel
@Binding var selectedTaskForEdit: TaskDetail?
@Binding var selectedTaskForComplete: TaskDetail?
@Binding var selectedTaskForArchive: TaskDetail?
@Binding var selectedTaskForEdit: TaskResponse?
@Binding var selectedTaskForComplete: TaskResponse?
@Binding var selectedTaskForArchive: TaskResponse?
@Binding var showArchiveConfirmation: Bool
let reloadTasks: () -> Void