MCPcopy Create free account
hub / github.com/devaccuracy/ledgerforge / CreateLedger

Method CreateLedger

database/ledger.go:41–72  ·  view source on GitHub ↗

CreateLedger inserts a new ledger record into the database, ensuring metadata is properly marshaled into JSON format. It assigns a unique ledger ID with a suffix and captures the current timestamp as the creation time. Parameters: - ledger: The ledger data to be inserted into the database. Returns

(ledger model.Ledger)

Source from the content-addressed store, hash-verified

39// - model.Ledger: The created ledger object including the generated LedgerID and creation timestamp.
40// - error: An error if the ledger creation fails, including specific database error handling for conflicts.
41func (d Datasource) CreateLedger(ledger model.Ledger) (model.Ledger, error) {
42 // Marshal the metadata into JSON format
43 metaDataJSON, err := json.Marshal(ledger.MetaData)
44 if err != nil {
45 return model.Ledger{}, apierror.NewAPIError(apierror.ErrInternalServer, "Failed to marshal metadata", err)
46 }
47
48 // Assign a unique ledger ID and record the creation time
49 ledger.LedgerID = model.GenerateUUIDWithSuffix("ldg")
50 ledger.CreatedAt = time.Now()
51
52 // Insert the ledger into the database
53 _, err = d.Conn.ExecContext(context.Background(), `
54 INSERT INTO ledgerforge.ledgers (meta_data, name, ledger_id)
55 VALUES ($1, $2, $3)
56 `, metaDataJSON, ledger.Name, ledger.LedgerID)
57 // Handle database errors, specifically unique constraint violations
58 if err != nil {
59 pqErr, ok := err.(*pq.Error)
60 if ok {
61 switch pqErr.Code.Name() {
62 case "unique_violation":
63 return model.Ledger{}, apierror.NewAPIError(apierror.ErrConflict, "Ledger with this name or ID already exists", err)
64 default:
65 return model.Ledger{}, apierror.NewAPIError(apierror.ErrInternalServer, "Database error occurred", err)
66 }
67 }
68 return model.Ledger{}, apierror.NewAPIError(apierror.ErrInternalServer, "Failed to create ledger", err)
69 }
70
71 return ledger, nil
72}
73
74// GetAllLedgers retrieves a paginated list of ledger records from the database, unmarshaling their metadata from JSON format.
75// This method supports pagination and can be used to efficiently retrieve all ledgers over multiple requests.

Callers 3

TestCreateLedger_SuccessFunction · 0.95

Calls 2

NewAPIErrorFunction · 0.92
GenerateUUIDWithSuffixFunction · 0.92

Tested by 3

TestCreateLedger_SuccessFunction · 0.76