UpdateLedger updates an existing ledger's name in the database. It validates that the ledger exists and updates only the name field. Parameters: - id: The unique ID of the ledger to update. - name: The new name for the ledger. Returns: - *model.Ledger: The updated ledger object. - error: An error
(id, name string)
| 177 | // - *model.Ledger: The updated ledger object. |
| 178 | // - error: An error if the ledger is not found or if the update fails. |
| 179 | func (d Datasource) UpdateLedger(id, name string) (*model.Ledger, error) { |
| 180 | // First, check if the ledger exists |
| 181 | existingLedger, err := d.GetLedgerByID(id) |
| 182 | if err != nil { |
| 183 | return nil, err |
| 184 | } |
| 185 | |
| 186 | // Update the ledger name |
| 187 | _, err = d.Conn.ExecContext(context.Background(), ` |
| 188 | UPDATE ledgerforge.ledgers |
| 189 | SET name = $1 |
| 190 | WHERE ledger_id = $2 |
| 191 | `, name, id) |
| 192 | if err != nil { |
| 193 | pqErr, ok := err.(*pq.Error) |
| 194 | if ok { |
| 195 | switch pqErr.Code.Name() { |
| 196 | case "unique_violation": |
| 197 | return nil, apierror.NewAPIError(apierror.ErrConflict, "Ledger with this name already exists", err) |
| 198 | default: |
| 199 | return nil, apierror.NewAPIError(apierror.ErrInternalServer, "Database error occurred", err) |
| 200 | } |
| 201 | } |
| 202 | return nil, apierror.NewAPIError(apierror.ErrInternalServer, "Failed to update ledger", err) |
| 203 | } |
| 204 | |
| 205 | // Update the existing ledger object with the new name |
| 206 | existingLedger.Name = name |
| 207 | |
| 208 | return existingLedger, nil |
| 209 | } |
| 210 | |
| 211 | // GetAllLedgersWithFilter retrieves ledgers with advanced filtering support. |
| 212 | // It delegates to GetAllLedgersWithFilterAndOptions with nil options. |