Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit 3fd581e

Browse files
authored
Merge pull request #39 from gedorinku/fix_sorting_entries
記事のソート順を修正
2 parents c76ea7a + f3fa105 commit 3fd581e

File tree

10 files changed

+78
-98
lines changed

10 files changed

+78
-98
lines changed

api/entries.pb.go

Lines changed: 44 additions & 44 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/entries.swagger.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"name": "page_token",
3232
"in": "query",
3333
"required": false,
34-
"type": "integer",
34+
"type": "string",
3535
"format": "int64"
3636
},
3737
{
@@ -112,7 +112,7 @@
112112
}
113113
},
114114
"next_page_token": {
115-
"type": "integer",
115+
"type": "string",
116116
"format": "int64"
117117
}
118118
}

api/entries.validator.pb.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/protos/entries.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ message Entry {
3535
}
3636

3737
message ListEntriesRequest {
38-
uint32 page_token = 1;
38+
int64 page_token = 1;
3939
int32 page_size = 2 [(validator.field) = {int_gt: -1, int_lt: 101}];
4040
}
4141

4242
message ListEntriesResponse {
4343
repeated Entry entries = 1;
44-
uint32 next_page_token = 2;
44+
int64 next_page_token = 2;
4545
}

api/users.validator.pb.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/server/entries_server.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package server
33
import (
44
"context"
55
"database/sql"
6-
"math"
76
"time"
87

98
"github.com/golang/protobuf/ptypes/timestamp"
@@ -40,13 +39,16 @@ func (s *entryServiceServerImpl) ListPublicEntries(ctx context.Context, req *api
4039
if size == 0 {
4140
size = 50
4241
}
43-
maxID := req.GetPageToken()
44-
if maxID == 0 {
45-
maxID = math.MaxUint32
42+
nano := req.GetPageToken()
43+
var t time.Time
44+
if nano == 0 {
45+
t = time.Now()
46+
} else {
47+
t = time.Unix(0, nano)
4648
}
4749

4850
es := s.EntryStore(ctx)
49-
entries, next, err := es.ListPublicEntries(int64(maxID), int(size))
51+
entries, next, err := es.ListPublicEntries(t, int(size))
5052
if err != nil {
5153
if errors.Cause(err) == sql.ErrNoRows {
5254
return &api_pb.ListEntriesResponse{}, nil
@@ -57,7 +59,7 @@ func (s *entryServiceServerImpl) ListPublicEntries(ctx context.Context, req *api
5759
resp := entriesToResponse(entries, false, s.cfg)
5860
return &api_pb.ListEntriesResponse{
5961
Entries: resp,
60-
NextPageToken: uint32(next),
62+
NextPageToken: next.UnixNano(),
6163
}, nil
6264
}
6365

@@ -79,9 +81,7 @@ func entryToResponse(entry *record.Entry, includeEmail bool, cfg *config.Config)
7981
Link: entry.Link,
8082
ImageUrl: entry.ImageURL,
8183
UpdatedAt: timeToResponse(entry.UpdatedAt),
82-
}
83-
if t := entry.PublishedAt; t.Valid {
84-
e.PublishedAt = timeToResponse(t.Time)
84+
PublishedAt: timeToResponse(entry.PublishedAt),
8585
}
8686
if r := entry.R; r != nil {
8787
e.Author = userToResponse(r.Author, includeEmail, cfg)

db/entries.schema

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ create_table :entries, force: :cascade do |t|
77
t.string :guid, null: false
88
t.string :image_url, null: false
99
t.references :blog, foreign_key: true, null: false
10-
t.datetime :published_at, null: true
10+
t.datetime :published_at, null: false
1111
t.timestamps
1212

1313
t.index [:guid], unique: true

infra/record/entries.go

Lines changed: 3 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

infra/store/entry/entry_store.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import (
66
"database/sql"
77
"encoding/base64"
88
"encoding/binary"
9+
"time"
910

1011
"github.com/mmcdole/gofeed"
1112
"github.com/pkg/errors"
12-
"github.com/volatiletech/null"
1313
"github.com/volatiletech/sqlboiler/boil"
1414
"github.com/volatiletech/sqlboiler/queries/qm"
1515

@@ -32,27 +32,27 @@ func NewEntryStore(ctx context.Context, db *sql.DB) store.EntryStore {
3232
}
3333
}
3434

35-
func (s *entryStoreImpl) ListPublicEntries(maxEntryID int64, limit int) ([]*record.Entry, int64, error) {
35+
func (s *entryStoreImpl) ListPublicEntries(before time.Time, limit int) ([]*record.Entry, time.Time, error) {
3636
mods := []qm.QueryMod{
3737
qm.Load(record.EntryRels.Author),
3838
qm.Load(record.EntryRels.Blog),
3939
qm.InnerJoin("users on users.id = entries.author_id"),
4040
qm.InnerJoin("profiles on profiles.id = users.profile_id"),
4141
qm.Where("profiles.profile_scope = ?", model.Public),
42-
qm.Where("entries.id <= ?", maxEntryID),
42+
qm.Where("entries.published_at <= ?", before),
4343
qm.Limit(limit + 1),
44-
qm.OrderBy("entries.id desc"),
44+
qm.OrderBy("entries.published_at desc"),
4545
}
4646

4747
e, err := record.Entries(mods...).All(s.ctx, s.db)
4848
if err != nil {
49-
return nil, 0, errors.WithStack(err)
49+
return nil, time.Time{}, errors.WithStack(err)
5050
}
5151

5252
if len(e) <= limit {
53-
return e, 0, nil
53+
return e, time.Unix(0, 0), nil
5454
}
55-
return e[:limit], e[limit].ID, nil
55+
return e[:limit], e[limit].PublishedAt, nil
5656
}
5757

5858
func (s *entryStoreImpl) CreateEntries(blog *record.Blog, feed *gofeed.Feed) (n int64, err error) {
@@ -113,8 +113,10 @@ func (s *entryStoreImpl) CreateEntries(blog *record.Blog, feed *gofeed.Feed) (n
113113
if i := item.Image; i != nil {
114114
e.ImageURL = i.URL
115115
}
116-
if t := item.PublishedParsed; t != nil {
117-
e.PublishedAt = null.TimeFrom(t.In(boil.GetLocation()))
116+
if t := item.PublishedParsed; t == nil {
117+
e.PublishedAt = time.Now().In(boil.GetLocation())
118+
} else {
119+
e.PublishedAt = t.In(boil.GetLocation())
118120
}
119121

120122
err = e.Insert(s.ctx, tx, boil.Infer())

0 commit comments

Comments
 (0)