package db import ( "fmt" ) func (d *DB) ReplaceSambaShares(shares []SambaShare) error { tx, err := d.conn.Begin() if err != nil { return fmt.Errorf("begin tx: %w", err) } defer func() { _ = tx.Rollback() }() if _, err := tx.Exec(`DELETE FROM samba_shares`); err != nil { return fmt.Errorf("clear samba_shares: %w", err) } for _, share := range shares { validUsers, err := encodeJSONStrings(share.ValidUsers) if err != nil { return err } validGroups, err := encodeJSONStrings(share.ValidGroups) if err != nil { return err } readOnly := 0 if share.ReadOnly { readOnly = 1 } guestOK := 0 if share.GuestOK { guestOK = 1 } _, err = tx.Exec(` INSERT INTO samba_shares (name, path, comment, read_only, guest_ok, valid_users, valid_groups) VALUES (?, ?, ?, ?, ?, ?, ?)`, share.Name, share.Path, share.Comment, readOnly, guestOK, validUsers, validGroups, ) if err != nil { return fmt.Errorf("insert samba share %s: %w", share.Name, err) } } return tx.Commit() } func (d *DB) ReplaceNFSExports(exports []NFSExport) error { tx, err := d.conn.Begin() if err != nil { return fmt.Errorf("begin tx: %w", err) } defer func() { _ = tx.Rollback() }() if _, err := tx.Exec(`DELETE FROM nfs_exports`); err != nil { return fmt.Errorf("clear nfs_exports: %w", err) } for _, exp := range exports { clients, err := encodeJSONStrings(exp.Clients) if err != nil { return err } _, err = tx.Exec(` INSERT INTO nfs_exports (path, clients, options) VALUES (?, ?, ?)`, exp.Path, clients, exp.Options, ) if err != nil { return fmt.Errorf("insert nfs export %s: %w", exp.Path, err) } } return tx.Commit() }