1

Various improvements

This commit is contained in:
Alex Yatskov 2015-03-26 12:18:43 +09:00
parent 142e163510
commit c2997ff3a1
5 changed files with 44 additions and 63 deletions

View File

@ -81,6 +81,7 @@ func executeQuery(rw http.ResponseWriter, req *http.Request) {
item := jsonRecord{ item := jsonRecord{
Name: value.name, Name: value.name,
Url: value.url,
Score: value.score, Score: value.score,
DistanceToUser: value.distanceToUser, DistanceToUser: value.distanceToUser,
DistanceToStn: value.distanceToStn, DistanceToStn: value.distanceToStn,
@ -205,46 +206,35 @@ func accessReview(rw http.ResponseWriter, req *http.Request) {
return return
} }
reviewRow := db.QueryRow("SELECT url FROM reviews WHERE id = (?) LIMIT 1", request.Id) reviewsResult, err := db.Exec("UPDATE reviews SET accessCount = accessCount + 1 WHERE id = (?)", request.Id)
var reply jsonAccessReply
if err := reviewRow.Scan(&reply.Url); err == nil {
reply.Url = "http://www.tripadvisor.com" + reply.Url
reply.Success = true
}
if reply.Success {
_, err := db.Exec("UPDATE reviews SET accessCount = accessCount + 1 WHERE id = (?)", request.Id)
if err != nil {
log.Fatal(err)
}
if len(request.Profile) > 0 {
result, err := db.Exec("INSERT INTO history(date, reviewId) VALUES(NOW(), ?)", request.Id)
if err != nil {
log.Fatal(err)
}
insertId, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
for id, value := range request.Profile {
if _, err := db.Exec("INSERT INTO historyGroups(categoryId, categoryValue, historyId) VALUES(?, ?, ?)", id, value, insertId); err != nil {
log.Fatal(err)
}
}
}
}
js, err := json.Marshal(reply)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
rw.Header().Set("Content-Type", "application/json") rowsAffected, err := reviewsResult.RowsAffected()
rw.Write(js) if err != nil {
log.Fatal(err)
}
if rowsAffected == 0 || len(request.Profile) == 0 {
return
}
historyResult, err := db.Exec("INSERT INTO history(date, reviewId) VALUES(NOW(), ?)", request.Id)
if err != nil {
log.Fatal(err)
}
insertId, err := historyResult.LastInsertId()
if err != nil {
log.Fatal(err)
}
for id, value := range request.Profile {
if _, err := db.Exec("INSERT INTO historyGroups(categoryId, categoryValue, historyId) VALUES(?, ?, ?)", id, value, insertId); err != nil {
log.Fatal(err)
}
}
} }
func staticPath() (string, error) { func staticPath() (string, error) {

View File

@ -106,12 +106,12 @@
</thead> </thead>
{{#each records}} {{#each records}}
<tr> <tr>
<td><a href="javascript:accessReview({{id}});">{{name}}</a></td> <td><a href="{{url}}" target="_blank" onclick="javascript:accessReview({{id}});">{{name}}</a></td>
<td>{{distanceToUser}} km</td> <td>{{#prettyFloat 2}}{{distanceToUser}}{{/prettyFloat}} km</td>
<td>{{closestStn}}</td> <td>{{closestStn}}</td>
<td>{{distanceToStn}} km</td> <td>{{distanceToStn}} m</td>
<td>{{accessCount}}</td> <td>{{accessCount}}</td>
<td>{{score}}</td> <td>{{#prettyFloat 4}}{{score}}{{/prettyFloat}}</td>
</tr> </tr>
{{/each}} {{/each}}
</table> </table>

View File

@ -35,10 +35,11 @@
} }
function onReady(geo) { function onReady(geo) {
_ctx = { _ctx = {geo: geo, query: {}};
geo: geo,
query: {} Handlebars.registerHelper('prettyFloat', function(precision, options) {
}; return parseFloat(options.fn(this)).toFixed(precision);
});
$('#minScore,#hintSteps,#walkingDist,#maxResults').change(onSearch); $('#minScore,#hintSteps,#walkingDist,#maxResults').change(onSearch);
$('#profileDlg').on('hidden.bs.modal', onSearch); $('#profileDlg').on('hidden.bs.modal', onSearch);
@ -50,11 +51,8 @@
}); });
window.accessReview = function(id) { window.accessReview = function(id) {
$.post('/access', JSON.stringify({id: id, profile: getProfile()}), function(results) { $.post('/access', JSON.stringify({id: id, profile: getProfile()}));
if (results.success) { onSearch();
location.replace(results.url);
}
}, 'json');
}; };
onSearch(); onSearch();
@ -130,21 +128,18 @@
} }
_ctx.grapher.setColumns(columns); _ctx.grapher.setColumns(columns);
outputMatches(results.records, results.count);
}
function outputMatches(records, count) { var searchResultCnt = String(results.records.length);
var searchResultCnt = String(records.length); if (results.records.length < results.count) {
if (records.length < count) { searchResultCnt += ' of ' + results.count;
searchResultCnt += ' of ' + count;
} }
$('#resultCount').text(searchResultCnt); $('#resultCount').text(searchResultCnt);
var template = Handlebars.compile($('#template').html()); var template = Handlebars.compile($('#template').html());
$('#records').empty(); $('#records').empty();
$('#records').append(template({records: records})); $('#records').append(template({records: results.records}));
if (records.length === 0) { if (results.records.length === 0) {
$('#resultPanel').slideUp(); $('#resultPanel').slideUp();
} }
else { else {

View File

@ -29,11 +29,6 @@ type jsonAccessRequest struct {
Profile featureMap `json:"profile"` Profile featureMap `json:"profile"`
} }
type jsonAccessReply struct {
Success bool `json:"success"`
Url string `json:"url"`
}
type jsonGeoData struct { type jsonGeoData struct {
Latitude float64 `json:"latitude"` Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"` Longitude float64 `json:"longitude"`
@ -69,6 +64,7 @@ type jsonRecord struct {
Id int `json:"id"` Id int `json:"id"`
Name string `json:"name"` Name string `json:"name"`
Score float64 `json:"score"` Score float64 `json:"score"`
Url string `json:"url"`
} }
type jsonQueryResponse struct { type jsonQueryResponse struct {

View File

@ -235,7 +235,7 @@ func getRecords(context queryContext) records {
entry := record{ entry := record{
name: name, name: name,
url: url, url: "http://www.tripadvisor.com" + url,
distanceToStn: distanceToStn, distanceToStn: distanceToStn,
closestStn: closestStn, closestStn: closestStn,
accessCount: accessCount, accessCount: accessCount,