server/dao/postgres/RoleDAO.go

99 lines
2.3 KiB
Go

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
}