BankAccount.kt| Access level | Groups field | Users field | Stored as |
|---|---|---|---|
| Full access | fullAccessGroups | fullAccessUsers | fullAccessGroupIds / fullAccessUserIds |
| Read-only | readonlyAccessGroups | readonlyAccessUsers | readonlyAccessGroupIds / readonlyAccessUserIds |
| Minimal | minimalAccessGroups | minimalAccessUsers | minimalAccessGroupIds / minimalAccessUserIds |
// API response: DO → DTO 45 override fun copyFrom(src: BankAccountDO) { 46 super.copyFrom(src) ← auto-copies: name, iban, bic, etc. 47 fullAccessGroups = Group.toGroupList(src.fullAccessGroupIds) ← "12,45,78" → [Group, Group] 49 readonlyAccessGroups = Group.toGroupList(src.readonlyAccessGroupIds) 50 ... 53 } // API request: DTO → DO 56 override fun copyTo(dest: BankAccountDO) { 57 super.copyTo(dest) 58 dest.fullAccessGroupIds = Group.toLongList(fullAccessGroups) ← [Group, Group] → "12,45,78" 60 ... 64 }
File is at plugins/.../banking/BankAccount.kt but declares package org.projectforge.rest.dto — the DTO lives with the plugin source but belongs to the REST DTO package. This pattern keeps DTOs co-located with their plugin modules while sharing a namespace with all other DTOs for consistency in API serialization.
A REST Data Transfer Object for bank accounts — bridges between the BankAccountDO entity (#48) and the REST API JSON format. Extends
BaseDTO<BankAccountDO>which auto-maps simple fields (name, iban, bic, etc.) between DO and DTO. Manual conversion handles the 6 access lists that are stored as CSV integers in the database but exposed as structured JSON arrays in the API.