99 lines
2.3 KiB
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
|
|
}
|