mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex.git
synced 2026-09-21 16:52:00 -07:00
Added GET /sm/list/all/0 endpoint
This commit is contained in:
@@ -10,7 +10,16 @@ import mongoose from 'mongoose'
|
|||||||
const SmAccount = new mongoose.Schema({
|
const SmAccount = new mongoose.Schema({
|
||||||
npub: { type: String, required: true },
|
npub: { type: String, required: true },
|
||||||
bchAddr: { type: String, required: true, default: '' },
|
bchAddr: { type: String, required: true, default: '' },
|
||||||
pubkey: { type: String, required: true }
|
pubkey: { type: String, required: true },
|
||||||
|
pfp: { type: String, default: '' },
|
||||||
|
createdAt: { type: Date, default: Date.now },
|
||||||
|
updatedAt: { type: Date, default: Date.now },
|
||||||
|
followers: { type: Number, default: 0 },
|
||||||
|
following: { type: Number, default: 0 },
|
||||||
|
posts: { type: Number, default: 0 },
|
||||||
|
likes: { type: Number, default: 0 },
|
||||||
|
comments: { type: Number, default: 0 },
|
||||||
|
reposts: { type: Number, default: 0 }
|
||||||
})
|
})
|
||||||
|
|
||||||
export default mongoose.model('smAccount', SmAccount)
|
export default mongoose.model('smAccount', SmAccount)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import OfferRouter from './offer/index.js'
|
|||||||
import OrderRouter from './order/index.js'
|
import OrderRouter from './order/index.js'
|
||||||
import P2WDBRouter from './p2wdb/index.js'
|
import P2WDBRouter from './p2wdb/index.js'
|
||||||
import UsageRESTController from './usage/index.js'
|
import UsageRESTController from './usage/index.js'
|
||||||
|
import SmAccountRouter from './smAccount/index.js'
|
||||||
|
|
||||||
class RESTControllers {
|
class RESTControllers {
|
||||||
constructor (localConfig = {}) {
|
constructor (localConfig = {}) {
|
||||||
@@ -86,6 +87,9 @@ class RESTControllers {
|
|||||||
// Attach the REST API Controllers associated with the /usage route
|
// Attach the REST API Controllers associated with the /usage route
|
||||||
const usageRESTController = new UsageRESTController(dependencies)
|
const usageRESTController = new UsageRESTController(dependencies)
|
||||||
usageRESTController.attach(app)
|
usageRESTController.attach(app)
|
||||||
|
|
||||||
|
const smAccountRouter = new SmAccountRouter(dependencies)
|
||||||
|
smAccountRouter.attach(app)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
REST API Controller library for the /order route
|
||||||
|
*/
|
||||||
|
|
||||||
|
// const { wlogger } = require('../../../adapters/wlogger')
|
||||||
|
|
||||||
|
let _this
|
||||||
|
|
||||||
|
class SmAccountRESTControllerLib {
|
||||||
|
constructor (localConfig = {}) {
|
||||||
|
// Dependency Injection.
|
||||||
|
this.adapters = localConfig.adapters
|
||||||
|
if (!this.adapters) {
|
||||||
|
throw new Error(
|
||||||
|
'Instance of Adapters library required when instantiating /order REST Controller.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
this.useCases = localConfig.useCases
|
||||||
|
if (!this.useCases) {
|
||||||
|
throw new Error(
|
||||||
|
'Instance of Use Cases library required when instantiating /order REST Controller.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encapsulate dependencies
|
||||||
|
this.SmAccountModel = this.adapters.localdb.SmAccount
|
||||||
|
// this.userUseCases = this.useCases.user
|
||||||
|
|
||||||
|
_this = this
|
||||||
|
}
|
||||||
|
|
||||||
|
// curl -X GET http://localhost:5700/sm/list/all/0
|
||||||
|
async listAccounts (ctx) {
|
||||||
|
try {
|
||||||
|
let page = ctx.params.page
|
||||||
|
if (!page) page = 0
|
||||||
|
|
||||||
|
const offers = await _this.useCases.smAccount.listAccounts(page)
|
||||||
|
|
||||||
|
ctx.body = offers
|
||||||
|
} catch (err) {
|
||||||
|
console.log('Error in listAccounts REST API handler: ', err)
|
||||||
|
_this.handleError(ctx, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DRY error handler
|
||||||
|
handleError (ctx, err) {
|
||||||
|
console.log('err', err)
|
||||||
|
|
||||||
|
// If an HTTP status is specified by the buisiness logic, use that.
|
||||||
|
if (err.status) {
|
||||||
|
if (err.message) {
|
||||||
|
ctx.throw(err.status, err.message)
|
||||||
|
} else {
|
||||||
|
ctx.throw(err.status)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// By default use a 422 error if the HTTP status is not specified.
|
||||||
|
ctx.throw(422, err.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SmAccountRESTControllerLib
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
REST API library for /order route.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Public npm libraries.
|
||||||
|
import Router from 'koa-router'
|
||||||
|
|
||||||
|
// Local libraries.
|
||||||
|
import SmAccountRESTControllerLib from './controller.js'
|
||||||
|
import Validators from '../middleware/validators.js'
|
||||||
|
|
||||||
|
let _this
|
||||||
|
|
||||||
|
class SmAccountRouter {
|
||||||
|
constructor (localConfig = {}) {
|
||||||
|
// Dependency Injection.
|
||||||
|
this.adapters = localConfig.adapters
|
||||||
|
if (!this.adapters) {
|
||||||
|
throw new Error(
|
||||||
|
'Instance of Adapters library required when instantiating /sm REST Controller.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
this.useCases = localConfig.useCases
|
||||||
|
if (!this.useCases) {
|
||||||
|
throw new Error(
|
||||||
|
'Instance of Use Cases library required when instantiating /sm REST Controller.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const dependencies = {
|
||||||
|
adapters: this.adapters,
|
||||||
|
useCases: this.useCases
|
||||||
|
}
|
||||||
|
|
||||||
|
// Encapsulate dependencies.
|
||||||
|
this.validators = new Validators()
|
||||||
|
this.smAccountRESTController = new SmAccountRESTControllerLib(dependencies)
|
||||||
|
|
||||||
|
// Instantiate the router and set the base route.
|
||||||
|
const baseUrl = '/sm'
|
||||||
|
this.router = new Router({ prefix: baseUrl })
|
||||||
|
|
||||||
|
this.listAccounts = this.listAccounts.bind(this)
|
||||||
|
_this = this
|
||||||
|
}
|
||||||
|
|
||||||
|
attach (app) {
|
||||||
|
if (!app) {
|
||||||
|
throw new Error(
|
||||||
|
'Must pass app object when attached REST API controllers.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define the routes and attach the controller.
|
||||||
|
this.router.get('/list/all/:page', _this.smAccountRESTController.listAccounts)
|
||||||
|
|
||||||
|
// Attach the Controller routes to the Koa app.
|
||||||
|
app.use(_this.router.routes())
|
||||||
|
app.use(_this.router.allowedMethods())
|
||||||
|
}
|
||||||
|
|
||||||
|
async listAccounts (ctx, next) {
|
||||||
|
// await _this.validators.ensureUser(ctx, next)
|
||||||
|
await _this.smAccountRESTController.listAccounts(ctx, next)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SmAccountRouter
|
||||||
@@ -26,7 +26,7 @@ class TimerControllers {
|
|||||||
// Constants
|
// Constants
|
||||||
this.cleanUsageInterval = 60000 * 60 // 1 hour
|
this.cleanUsageInterval = 60000 * 60 // 1 hour
|
||||||
this.backupUsageInterval = 60000 * 10 // 10 minutes
|
this.backupUsageInterval = 60000 * 10 // 10 minutes
|
||||||
this.newSmAccountsInterval = 60000 * 1 // 1 minute
|
this.newSmAccountsInterval = 60000 * 60 // 60 minutes
|
||||||
|
|
||||||
// Encapsulate dependencies
|
// Encapsulate dependencies
|
||||||
this.config = config
|
this.config = config
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class smAccountUseCases {
|
|||||||
|
|
||||||
// Bind 'this' object to all methods
|
// Bind 'this' object to all methods
|
||||||
this.checkForNewSmAccounts = this.checkForNewSmAccounts.bind(this)
|
this.checkForNewSmAccounts = this.checkForNewSmAccounts.bind(this)
|
||||||
|
this.listAccounts = this.listAccounts.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for new Social Media Accounts.
|
// Check for new Social Media Accounts.
|
||||||
@@ -60,6 +61,18 @@ class smAccountUseCases {
|
|||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// List all Social Media Accounts.
|
||||||
|
async listAccounts (page = 0) {
|
||||||
|
try {
|
||||||
|
const SmAccount = await this.adapters.localdb.SmAccount
|
||||||
|
const accounts = await SmAccount.find({}).skip(page * 10).limit(10)
|
||||||
|
return accounts
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error in smAccount-use-cases.js/listAccounts(): ', err)
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default smAccountUseCases
|
export default smAccountUseCases
|
||||||
|
|||||||
Reference in New Issue
Block a user