Skip to content

Commit

Permalink
#21 Add Filters for instrument, pagecount
Browse files Browse the repository at this point in the history
  • Loading branch information
David Rauh committed May 11, 2023
1 parent ce6f5d4 commit 9290644
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 26 deletions.
7 changes: 4 additions & 3 deletions cmd/mb3server/src/api-impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func GetRecords(limit int32, page int32, contributor string, instrumentType []st
}
log.Println(ionModeLokal)
it := &instrumentType
if len(*it) == 0 {
if len(*it) == 0 || (len(*it) == 1 && (*it)[0] == "") {
it = nil
}

Expand All @@ -136,7 +136,7 @@ func GetRecords(limit int32, page int32, contributor string, instrumentType []st
}

var filters = database.Filters{
InstrumentType: nil,
InstrumentType: it,
Splash: "",
MsType: msTypeLokal,
IonMode: ionModeLokal,
Expand All @@ -152,7 +152,7 @@ func GetRecords(limit int32, page int32, contributor string, instrumentType []st
Limit: int64(limit),
Offset: int64(offset),
}
records, err := db.GetRecords(filters)
records, count, err := db.GetRecords(filters)
if err != nil {
return nil, err
}
Expand All @@ -168,6 +168,7 @@ func GetRecords(limit int32, page int32, contributor string, instrumentType []st
}
result.Data = append(result.Data, val)
}
result.Metadata.ResultCount = int32(count)
return &result, nil
}

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ require (
github.com/go-git/go-git/v5 v5.5.2
github.com/lib/pq v1.10.7
github.com/nullism/bqb v1.3.1
go.mongodb.org/mongo-driver v1.11.1
go.mongodb.org/mongo-driver v1.11.6
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
)

Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8=
go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8=
go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o=
go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
Expand Down
2 changes: 1 addition & 1 deletion pkg/database/db_interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ type MB3Database interface {
// GetRecords Get an array of MassBank records by filtering
//
// Will return an empty list if the filter does not match any records.
GetRecords(filters Filters) ([]*massbank.Massbank, error)
GetRecords(filters Filters) ([]*massbank.Massbank, int64, error)

// GetUniqueValues is used to get the values for filter frontend
GetUniqueValues(filters Filters) (MB3Values, error)
Expand Down
2 changes: 1 addition & 1 deletion pkg/database/db_interface_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ func TestMB3Database_GetRecords(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.db.db.GetRecords(tt.args)
got, _, err := tt.db.db.GetRecords(tt.args)
if (err != nil) != tt.wantErr {
t.Errorf("%s: GetRecords() error = %v, wantErr %v", tt.db.name, err, tt.wantErr)
return
Expand Down
14 changes: 8 additions & 6 deletions pkg/database/mongodb.go
Original file line number Diff line number Diff line change
Expand Up @@ -389,12 +389,13 @@ func (db *Mb3MongoDB) GetRecord(s *string) (*massbank.Massbank, error) {
// GetRecords see [MB3Database.GetRecords]
func (db *Mb3MongoDB) GetRecords(
filters Filters,
) ([]*massbank.Massbank, error) {
) ([]*massbank.Massbank, int64, error) {
if db.database == nil {
return nil, errors.New("database not ready")
return nil, 0, errors.New("database not ready")
}
var err error
var cur *mongo.Cursor
var count int64
if filters.Limit <= 0 {
filters.Limit = DefaultValues.Limit
}
Expand All @@ -412,23 +413,24 @@ func (db *Mb3MongoDB) GetRecords(
} else {
query := getQuery(filters)
cur, err = db.database.Collection(mbCollection).Find(context.Background(), query, options.Find().SetLimit(filters.Limit).SetSkip(filters.Offset))
count, err = db.database.Collection(mbCollection).CountDocuments(context.Background(), query)
}
if err != nil {
return nil, err
return nil, 0, err
}
var bsonResult []bson.M
if err := cur.All(context.Background(), &bsonResult); err != nil {
return nil, err
return nil, 0, err
}
var mbResult = []*massbank.Massbank{}
for _, val := range bsonResult {
mb, err := unmarshal2Massbank(err, &val)
if err != nil {
return nil, err
return nil, 0, err
}
mbResult = append(mbResult, mb)
}
return mbResult, nil
return mbResult, count, nil
}

func getQuery(filters Filters) bson.D {
Expand Down
2 changes: 1 addition & 1 deletion web-frontend/src/lib/components/MainNav.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<a href="https://github.com/MassBank/MassBank-data/releases/latest" target="_blank" class="pure-menu-link">Download</a>
</li>
<li class="pure-menu-item">
<input type="search" placeholder="Accession" bind:value="{acc}"><button on:click={() => goto('/record/'+acc)}>Go</button>{acc}
<input type="search" placeholder="Accession" bind:value="{acc}"><button on:click={() => goto('/record/'+acc)}>Go</button>
</li>
<li class="pure-menu-item pure-menu-has-children pure-menu-allow-hover">
<a href="#" id="moreLink" class="pure-menu-link">More</a>
Expand Down
28 changes: 15 additions & 13 deletions web-frontend/src/routes/contents/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
/** @type {import('./$types').PageData} */
export let data: any;
let base: string;
let page: bigint = 1;
let pages: bigint = 10;
let cur_page: number = 1;
let pages: number = 10;
async function getFilters(base) {
let resp = await fetch(base + "/v1/filter/browse");
let jsonData = await resp.json();
Expand All @@ -24,16 +24,20 @@
async function getResults(page) {
let url = new URL("/v1/records",base)
url.searchParams.append('page',page.toString())
contribuors.forEach(element => url.searchParams.append('contributor',element))
msType.forEach(element => url.searchParams.append('ms_type',element))
instrumentType.forEach(element => url.searchParams.append('instrument_type',element))
ionMode.forEach(element => url.searchParams.append('ion-mode',element))
url.searchParams.append('instrument_type',instrumentType.join())
url.searchParams.append('ms_type',msType.join())
url.searchParams.append('ion-mode',ionMode.join())
url.searchParams.append('contributor',contributors.join())
console.log(url)
let resp = await fetch(url)
let jsonData = await resp.json();
if(resp.ok) {
console.log(JSON.stringify(jsonData))
pages = Math.floor(Number(jsonData.metadata.result_count)/20+1)
if (cur_page>pages) {
cur_page=1
}
return jsonData
} else {
Expand All @@ -42,14 +46,12 @@
}
}
let contribuors = [];
let contributors = [];
let msType = [];
let instrumentType = [];
let ionMode = [];
$: base = data.baseurl
</script>
{base}
{contribuors}
<div class="pure-g">
<div class="pure-u-1-5">
{#await getFilters(base)}
Expand All @@ -58,7 +60,7 @@
<div class="card">
<h2>Filters</h2>
<h3>Contributor</h3>
<FilterButton bind:result={contribuors} group="cont" values={filters.contributor}></FilterButton>
<FilterButton bind:result={contributors} group="cont" values={filters.contributor}></FilterButton>
<h3>Instrument Type</h3>
<FilterButton bind:result={instrumentType} group="itype" values={filters.instrument_type}></FilterButton>
<h3>MS Type</h3>
Expand All @@ -72,11 +74,11 @@
</div>
<div class="pure-u-4-5">
<h2>Results</h2>
{#key ionMode,msType,contribuors,instrumentType}
{#await getResults(page)}
{#key ionMode,msType,contributors,instrumentType}
{#await getResults(cur_page)}
<div class="info">Loading results...</div>
{:then records}
<Pagination bind:currentPage={page} pages={pages}>
<Pagination bind:currentPage={cur_page} pages={pages}>
{#each records.data as record}
<ShortRecordSummary record="{record}"></ShortRecordSummary>
{/each}
Expand Down

0 comments on commit 9290644

Please sign in to comment.