Skip to content

Commit

Permalink
refactor(api): rename price to result
Browse files Browse the repository at this point in the history
  • Loading branch information
Tommytrg committed Jun 11, 2021
1 parent 98099d2 commit 734a87b
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 96 deletions.
4 changes: 2 additions & 2 deletions packages/api/src/repository/Feed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ export class FeedRepository {
return this._normalizeId(response.ops[0])
}

async addPriceRequest (feedId: ObjectId, priceRequestId: ObjectId) {
async addResultRequest (feedId: ObjectId, resultRequestId: ObjectId) {
const response = await this.collection.findOneAndUpdate(
{ _id: feedId },
{ $push: { requests: priceRequestId } },
{ $push: { requests: resultRequestId } },
{ returnDocument: 'after' }
)

Expand Down
49 changes: 0 additions & 49 deletions packages/api/src/repository/PriceRequest.ts

This file was deleted.

49 changes: 49 additions & 0 deletions packages/api/src/repository/ResultRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Db, Collection, ObjectId } from 'mongodb'
import { ResultRequestDbObject } from '../generated/types'

export class ResultRequestRepository {
collection: Collection<ResultRequestDbObject>

constructor (db: Db) {
this.collection = db.collection('result_request')
}

async getFeedRequests (feedId: ObjectId) {
return (
await this.collection
.find({
feedId: feedId.toString()
})
.toArray()
).map(this.normalizeId)
}

async getLastResult (feedId: ObjectId) {
const lastResultRequest = await this.collection.findOne(
{
feedId: feedId.toString()
},
{
sort: {
timestamp: -1
},
collation: {
locale: 'en_US',
numericOrdering: true
}
}
)

return lastResultRequest?.result
}

async insert (resultRequest: Omit<ResultRequestDbObject, '_id'>) {
const response = await this.collection.insertOne(resultRequest)

return this.normalizeId(response.ops[0])
}

private normalizeId (resultRequest: ResultRequestDbObject) {
return { ...resultRequest, id: resultRequest._id }
}
}
12 changes: 6 additions & 6 deletions packages/api/src/resolvers.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { FeedRepository } from './repository/Feed'
import { PriceRequestRepository } from './repository/PriceRequest'
import { ResultRequestRepository } from './repository/ResultRequest'
type Context = {
feedRepository: FeedRepository
priceRequestRepository: PriceRequestRepository
resultRequestRepository: ResultRequestRepository
}

const resolvers = {
Expand All @@ -16,11 +16,11 @@ const resolvers = {
}
},
Feed: {
requests: async (parent, _args, { priceRequestRepository }: Context) => {
return await priceRequestRepository.getFeedRequests(parent.id)
requests: async (parent, _args, { resultRequestRepository }: Context) => {
return await resultRequestRepository.getFeedRequests(parent.id)
},
lastPrice: async (parent, _args, { priceRequestRepository }: Context) => {
return await priceRequestRepository.getLastPrice(parent.id)
lastResult: async (parent, _args, { resultRequestRepository }: Context) => {
return await resultRequestRepository.getLastResult(parent.id)
}
}
}
Expand Down
30 changes: 15 additions & 15 deletions packages/api/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,46 @@ import { DIRECTIVES } from '@graphql-codegen/typescript-mongodb'
import resolvers from './resolvers'
import { Db } from 'mongodb'
import { FeedRepository } from './repository/Feed'
import { PriceRequestRepository } from './repository/PriceRequest'
import { ResultRequestRepository } from './repository/ResultRequest'

// async function addSampleData(feedRepository: FeedRepository, priceRequestRepository: PriceRequestRepository) {
// async function addSampleData(feedRepository: FeedRepository, resultRequestRepository: ResultRequestRepository) {
// await feedRepository.collection.drop()
// await priceRequestRepository.collection.drop()
// await resultRequestRepository.collection.drop()

// const feed1 = await feedRepository.insert({
// address: "1",
// name: "btc/eur",
// requests: []
// })

// const priceRequest1 = await priceRequestRepository.insert({
// price: 1000.00,
// const resultRequest1 = await resultRequestRepository.insert({
// result: 1000.00,
// feedId: feed1._id.toString(),
// requestId: '1',
// timestamp: Date.now().toString(),
// })
// await feedRepository.addPriceRequest(feed1._id, priceRequest1._id)
// await feedRepository.addResultRequest(feed1._id, resultRequest1._id)

// const priceRequest2 = await priceRequestRepository.insert({
// price: 2000.00,
// const resultRequest2 = await resultRequestRepository.insert({
// result: 2000.00,
// feedId: feed1._id.toString(),
// requestId: '2',
// timestamp: Date.now().toString(),
// })
// await feedRepository.addPriceRequest(feed1._id, priceRequest2._id)
// await feedRepository.addResultRequest(feed1._id, resultRequest2._id)

// const feed2 = await feedRepository.insert({
// address: "2",
// name: "btc/usd",
// requests: []
// })
// const priceRequest3 = await priceRequestRepository.insert({
// price: 3000.00,
// const resultRequest3 = await resultRequestRepository.insert({
// result: 3000.00,
// feedId: feed2._id.toString(),
// requestId: '3',
// timestamp: Date.now().toString(),
// })
// await feedRepository.addPriceRequest(feed2._id, priceRequest3._id)
// await feedRepository.addResultRequest(feed2._id, resultRequest3._id)

// await feedRepository.insert({
// address: "3",
Expand All @@ -54,12 +54,12 @@ import { PriceRequestRepository } from './repository/PriceRequest'

export async function createServer (db: Db): Promise<ApolloServer> {
const feedRepository = new FeedRepository(db)
const priceRequestRepository = new PriceRequestRepository(db)
const resultRequestRepository = new ResultRequestRepository(db)

// addSampleData(feedRepository, priceRequestRepository)
// addSampleData(feedRepository, resultRequestRepository)

const context = () => {
return { feedRepository, priceRequestRepository }
return { feedRepository, resultRequestRepository }
}

const server = new ApolloServer({
Expand Down
8 changes: 4 additions & 4 deletions packages/api/src/typeDefs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ const typeDefs = gql`
id: String! @id
name: String! @column
address: String! @column
requests: [PriceRequest]! @link
lastPrice: Float! @column
requests: [ResultRequest]! @link
lastResult: Float! @column
}
type PriceRequest @entity {
type ResultRequest @entity {
id: String! @id
feedId: String! @column
price: Float! @column
result: Float! @column
requestId: String! @column
timestamp: String! @column
# request: DataRequest @embedded
Expand Down
40 changes: 20 additions & 20 deletions packages/api/test/feeds.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,37 +79,37 @@ describe('feeds', function () {
const feedResponse = await state.mongoManager.db
.collection('feed')
.insertOne(feedExample)
const priceRequestExample1 = {
price: 1111.0,
const resultRequestExample1 = {
result: 1111.0,
feedId: feedResponse.ops[0]._id.toString(),
requestId: '1',
timestamp: '1623085320000'
}
const priceRequestExample2 = {
price: 2222.0,
const resultRequestExample2 = {
result: 2222.0,
feedId: feedResponse.ops[0]._id.toString(),
requestId: '1',
timestamp: '1623085329000'
}
const priceRequestResponse1 = await state.mongoManager.db
.collection('price_request')
.insertOne(priceRequestExample1)
const priceRequestResponse2 = await state.mongoManager.db
.collection('price_request')
.insertOne(priceRequestExample2)
const resultRequestResponse1 = await state.mongoManager.db
.collection('result_request')
.insertOne(resultRequestExample1)
const resultRequestResponse2 = await state.mongoManager.db
.collection('result_request')
.insertOne(resultRequestExample2)

await state.mongoManager.db
.collection('feed')
.findOneAndUpdate(
{ _id: feedResponse.ops[0]._id },
{ $push: { requests: priceRequestResponse1.ops[0]._id.toString() } },
{ $push: { requests: resultRequestResponse1.ops[0]._id.toString() } },
{ returnDocument: 'after' }
)
await state.mongoManager.db
.collection('feed')
.findOneAndUpdate(
{ _id: feedResponse.ops[0]._id },
{ $push: { requests: priceRequestResponse2.ops[0]._id.toString() } },
{ $push: { requests: resultRequestResponse2.ops[0]._id.toString() } },
{ returnDocument: 'after' }
)

Expand All @@ -119,11 +119,11 @@ describe('feeds', function () {
id
address
name
lastPrice
lastResult
requests {
id
feedId
price
result
requestId
timestamp
error
Expand All @@ -140,23 +140,23 @@ describe('feeds', function () {
expect(feeds.length).toBe(1)
expect(feeds[0]).toHaveProperty('address', feedExample.address)
expect(feeds[0]).toHaveProperty('name', feedExample.name)
expect(feeds[0]).toHaveProperty('lastPrice', priceRequestExample2.price)
expect(feeds[0]).toHaveProperty('lastResult', resultRequestExample2.result)
expect(feeds[0].requests.length).toBe(2)
expect(feeds[0].requests[0]).toHaveProperty(
'feedId',
priceRequestExample1.feedId
resultRequestExample1.feedId
)
expect(feeds[0].requests[0]).toHaveProperty(
'price',
priceRequestExample1.price
'result',
resultRequestExample1.result
)
expect(feeds[0].requests[0]).toHaveProperty(
'requestId',
priceRequestExample1.requestId
resultRequestExample1.requestId
)
expect(feeds[0].requests[0]).toHaveProperty(
'timestamp',
priceRequestExample1.timestamp
resultRequestExample1.timestamp
)
expect(feeds[0].id).toBeTruthy()
})
Expand Down

0 comments on commit 734a87b

Please sign in to comment.