package postgres import ( "git.tek.govt.hu/dowerx/chat/server/model" "git.tek.govt.hu/dowerx/chat/server/util" "github.com/jmoiron/sqlx" ) type RoleDAOPG struct { pgDAO } func (d RoleDAOPG) Create(name string) (int, *util.ChatError) { rows, err := d.db.Query(`insert into "role" ("name") values ($1) returning "id"`, name) if err != nil { return 0, util.MakeError(err, util.DATABASE_QUERY_FAULT) } if !rows.Next() { return 0, &util.ChatError{Message: "no id returned by insert", Code: util.DATABASE_QUERY_FAULT} } var id int err = rows.Scan(&id) return id, util.MakeError(err, util.DATABASE_QUERY_FAULT) } func (d RoleDAOPG) Read(role model.Role) (model.Role, *util.ChatError) { var rows *sqlx.Rows var err error if role.ID != 0 { rows, err = d.db.NamedQuery(`select * from "role" where "id" = :id`, &role) } else { rows, err = d.db.NamedQuery(`select * from "role" where "name" = :name`, &role) } defer rows.Close() if err != nil { return role, util.MakeError(err, util.DATABASE_QUERY_FAULT) } if !rows.Next() { return role, &util.ChatError{Message: "", Code: util.NOT_FOUND} } err = rows.StructScan(&role) return role, util.MakeError(err, util.DATABASE_QUERY_FAULT) } func (d RoleDAOPG) List() ([]model.Role, *util.ChatError) { rows, err := d.db.Queryx(`select * from "role" order by "name"`) if err != nil { return nil, util.MakeError(err, util.DATABASE_QUERY_FAULT) } defer rows.Close() roles := make([]model.Role, 0) for rows.Next() { role := model.Role{} err = rows.StructScan(&role) if err != nil { break } roles = append(roles, role) } return roles, util.MakeError(err, util.DATABASE_QUERY_FAULT) } func (d RoleDAOPG) Update(role model.Role) *util.ChatError { _, err := d.db.NamedExec(`update "role" set "name" = :name where "id" = :id`, &role) return util.MakeError(err, util.DATABASE_QUERY_FAULT) } func (d RoleDAOPG) Delete(role model.Role) *util.ChatError { var err error if role.ID != 0 { _, err = d.db.NamedExec(`delete from "role" where "id" = :id`, &role) } else { _, err = d.db.NamedExec(`delete from "role" where "name" = :name`, &role) } return util.MakeError(err, util.DATABASE_QUERY_FAULT) } func MakeRoleDAO() (RoleDAOPG, *util.ChatError) { dao := RoleDAOPG{} conn, err := getDatabase() if err != nil { return dao, err } dao.db = conn return dao, nil }