-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser.go
More file actions
126 lines (104 loc) · 2.59 KB
/
Copy pathuser.go
File metadata and controls
126 lines (104 loc) · 2.59 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package main
import (
"appengine"
"appengine/datastore"
"errors"
"fmt"
"github.com/pakohan/go-libs/flatscan"
"net/url"
"strconv"
"strings"
)
type Setting struct {
Zip string
MinPrice int64
MaxPrice int64
MinRooms float64
MaxRooms float64
MinSize float64
MaxSize float64
Email string
Active bool
}
func getRangeValues(formValue string) (beginRange, endRange string, err error) {
if !strings.Contains(formValue, ";") {
err = errors.New(fmt.Sprintf("wrong entry '%+v'!", formValue))
return
}
parts := strings.Split(formValue, ";")
beginRange = parts[0]
endRange = parts[1]
return
}
func NewSetting(form url.Values, mail string) (pref *Setting) {
pref = &Setting{Email: mail}
pref.ChangeSetting(form)
return
}
func (s *Setting) ChangeSetting(form url.Values) (numErrors int) {
s.Zip = strings.ToLower(strings.Join(form["zip"], ";"))
s.Active = strings.EqualFold(form.Get("active"), "on")
beginRange, endRange, err := getRangeValues(form.Get("price"))
if err == nil {
s.MinPrice, err = strconv.ParseInt(beginRange, 10, 64)
if err != nil {
numErrors++
}
s.MaxPrice, err = strconv.ParseInt(endRange, 10, 64)
if err != nil {
numErrors++
}
} else {
numErrors++
}
beginRange, endRange, err = getRangeValues(form.Get("rooms"))
if err == nil {
s.MinRooms, err = strconv.ParseFloat(beginRange, 64)
if err != nil {
numErrors++
}
s.MaxRooms, err = strconv.ParseFloat(endRange, 64)
if err != nil {
numErrors++
}
} else {
numErrors++
}
beginRange, endRange, err = getRangeValues(form.Get("size"))
if err == nil {
s.MinSize, err = strconv.ParseFloat(beginRange, 64)
if err != nil {
numErrors++
}
s.MaxSize, err = strconv.ParseFloat(endRange, 64)
if err != nil {
numErrors++
}
} else {
numErrors++
}
return
}
func (s Setting) CheckOffer(offer flatscan.FlatOffer) (interested bool, err error) {
interested = s.MaxRooms > 0 && offer.Rooms > 0 && (offer.Rooms >= s.MinRooms) && (offer.Rooms <= s.MaxRooms)
if !interested {
return
}
interested = s.MaxPrice > 0 && offer.RentN > 0 && (int64(offer.RentN) >= s.MinPrice) && (int64(offer.RentN) <= s.MaxPrice)
if !interested {
return
}
interested = s.MaxSize > 0 && offer.Size > 0 && (offer.Size >= s.MinSize) && (offer.Size <= s.MaxSize)
if !interested {
return
}
interested = len(s.Zip) > 0 && offer.Zip > 0 && strings.Contains(s.Zip, fmt.Sprintf("%d", offer.Zip))
if !interested {
return
}
return
}
func GetSettings(c appengine.Context) (settings []Setting, err error) {
_, err = datastore.NewQuery(userEntitiy).Filter("Active =", true).GetAll(c, &settings)
return
}