summaryrefslogtreecommitdiff
path: root/db/endpoint.go
blob: d880510c810d5ee1a968c6717923564e3ffaf96a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package db

func (p *Phlox) CreateEndpoint(name, path, address string) (Endpoint, error) {
	var id int
	row := p.db.QueryRow("select coalesce(max(endpointid), 0) from endpoints;")
	err := row.Scan(&id)
	if err != nil {
		return Endpoint{}, err
	}
	id += 1

	_, err = p.db.Exec(
		"insert into endpoints values (?, ?, ?, ?)",
		id, name, path, address,
	)
	if err != nil {
		return Endpoint{}, err
	}

	endpoint := Endpoint{
		Id: id,
		Name: name,
		Path: path,
		Address: address,
	}

	return endpoint, nil
}


func (p *Phlox) DeleteEndpoint(endpoint Endpoint) error {
	_, err := p.db.Exec("delete from endpoints where endpointid = ?;", endpoint.Id)
	return err
}


func extractEndpoint(s Scanner) (Endpoint, error) {
	var endpoint Endpoint
	err := s.Scan(
		&endpoint.Id,
		&endpoint.Name,
		&endpoint.Path,
		&endpoint.Address,
	)
	return endpoint, err
}


func (p *Phlox) SetEndpointPath(endpoint Endpoint, path string) error {
	_, err := p.db.Exec("update endpoints set path=? where endpointid=?", path, endpoint.Id)
	return err
}

func (p *Phlox) SetEndpointAddress(endpoint Endpoint, address string) error {
	_, err := p.db.Exec("update endpoints set address=? where endpointid=?", address, endpoint.Id)
	return err
}


func queryEndpoint(p *Phlox, query, param string) (Endpoint, error) {
	row := p.db.QueryRow(query, param)
	endpoint, err := extractEndpoint(row)
	return endpoint, err
}

func (p *Phlox) GetEndpointByName(name string) (Endpoint, error) {
	return queryEndpoint(p, "select * from endpoints where name = ?;", name)
}

func (p *Phlox) GetEndpointByPath(path string) (Endpoint, error) {
	return queryEndpoint(p, "select * from endpoints where path = ?;", path)
}

func (p *Phlox) GetEndpointByAddress(address string) (Endpoint, error) {
	return queryEndpoint(p, "select * from endpoints where address = ?;", address)
}


func (p *Phlox) AllEndpoints() ([]Endpoint, error) {
	endpoints := make([]Endpoint, 0)
	rows, err := p.db.Query("select * from endpoints;")
	if err != nil {
		return endpoints, err
	}
	defer rows.Close()

	for rows.Next() {
		endpoint, err := extractEndpoint(rows)
		if err != nil {
			return endpoints, err
		}
		endpoints = append(endpoints, endpoint)
	}

	return endpoints, nil
}