updated to make index page working
This commit is contained in:
1 parent
7363d7c0ec
commit
5831275b7a
11 files changed
+160
-149
No files matched your search
@@ -7,6 +7,7 @@
|
||||
"scripts": {
|
||||
"start": "NODE_ENV=production node src/server.js",
|
||||
"dev": "ts-node --project server.tsconfig.json src/server.ts",
|
||||
"next-dev": "next dev",
|
||||
"build": "next build && next export -o dist && npm run sitemap && npm run feed && npm run robots-txt",
|
||||
"robots-txt": "node scripts/robots-txt.js",
|
||||
"sitemap": "node scripts/sitemap.js",
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
// import { findArticles } from '../../../src/api/articles'
|
||||
import { withMiddleware } from '../../../src/middlewares/withMiddleware'
|
||||
import Article from '../../../src/core/Article'
|
||||
|
||||
export default withMiddleware(async (req, res) => {
|
||||
// const { query } = req
|
||||
// const page = parseInt(query.page)
|
||||
// const pageSize = parseInt(query.pageSize)
|
||||
|
||||
// const data = await findArticles(page, pageSize)
|
||||
const data = await Article.find({})
|
||||
|
||||
if (data) {
|
||||
res.json(data)
|
||||
} else {
|
||||
res.status(404)
|
||||
res.json({
|
||||
error: `Article ${id} not found`
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,19 @@
|
||||
import { findArticles } from '../../../src/server/articles'
|
||||
import { withMiddleware } from '../../../src/middlewares/withMiddleware'
|
||||
|
||||
export default withMiddleware(async (req, res) => {
|
||||
const { query } = req
|
||||
const page = parseInt(query.page)
|
||||
const pageSize = parseInt(query.pageSize)
|
||||
|
||||
const data = await findArticles(page, pageSize)
|
||||
|
||||
if (data) {
|
||||
res.json(data)
|
||||
} else {
|
||||
res.status(404)
|
||||
res.json({
|
||||
error: `Articles not found`
|
||||
})
|
||||
}
|
||||
})
|
||||
+5
-7
@@ -1,10 +1,9 @@
|
||||
import Data from './Data'
|
||||
import Image from './Image'
|
||||
import Config from './Config'
|
||||
import { findOne, total } from '../lib/store'
|
||||
import * as libStore from '../lib/store'
|
||||
import { find, findOne, total } from '../lib/store'
|
||||
|
||||
const store = () => Data.getStore(Article)
|
||||
const store = () => Data.getStore('Article')
|
||||
|
||||
function make(C) {
|
||||
return x => new C(x)
|
||||
@@ -12,10 +11,9 @@ function make(C) {
|
||||
|
||||
export default class Article {
|
||||
static async find(query, options = {}): Promise<Article[]> {
|
||||
return []
|
||||
// const items = await libStore.find(store(), query, options as any)
|
||||
const items = await find(store(), query, options as any)
|
||||
|
||||
// return Promise.all(items.map(processArticle))
|
||||
return Promise.all(items.map(processArticle))
|
||||
}
|
||||
|
||||
static async findById(id) {
|
||||
@@ -126,7 +124,7 @@ async function processArticle(article) {
|
||||
if (previewId) {
|
||||
preview = await Image.findById(previewId)
|
||||
} else {
|
||||
preview = await resolveDefaultPreview()
|
||||
// preview = await resolveDefaultPreview()
|
||||
}
|
||||
|
||||
return new Article({
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
const Data = require('./Data')
|
||||
const {findOne} = require('../lib/store')
|
||||
|
||||
class Config {
|
||||
static get store() {
|
||||
return Data.getStore(Config)
|
||||
}
|
||||
|
||||
static async findConfig() {
|
||||
const config = await Config.findById('settings')
|
||||
return config || new Config({})
|
||||
}
|
||||
|
||||
static async findById(id) {
|
||||
const data = await findOne(Config.store, {id})
|
||||
if (!data) return null
|
||||
|
||||
return new Config(data)
|
||||
}
|
||||
|
||||
constructor({hash, file, ...data}) {
|
||||
this.hash = hash
|
||||
this.file = file
|
||||
this.server = data.server
|
||||
this.articlesPerPage = data.articlesPerPage || 5
|
||||
this.collectiveOrder = data.collectiveOrder || []
|
||||
this.articleCardDefaultPreview = data.articleCardDefaultPreview
|
||||
this.collectiveImage = data.collectiveImage
|
||||
|
||||
const redirect = data.redirect || {}
|
||||
this.redirect = new Map(Object
|
||||
.entries(redirect)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Config
|
||||
@@ -0,0 +1,44 @@
|
||||
import Data from './Data'
|
||||
import { findOne } from '../lib/store'
|
||||
|
||||
export default class Config {
|
||||
static get store() {
|
||||
return Data.getStore('Settings')
|
||||
}
|
||||
|
||||
static async findConfig() {
|
||||
const config = await Config.findById('settings')
|
||||
return config || new Config({} as any)
|
||||
}
|
||||
|
||||
static async findById(id) {
|
||||
const data = await findOne(Config.store, { id })
|
||||
if (!data) return null
|
||||
|
||||
return new Config(data)
|
||||
}
|
||||
|
||||
public hash: any
|
||||
public file: any
|
||||
public server: any
|
||||
public articlesPerPage: any
|
||||
public collectiveOrder: any
|
||||
public articleCardDefaultPreview: any
|
||||
public collectiveImage: any
|
||||
public redirect: any
|
||||
|
||||
constructor({ hash, file, ...data }) {
|
||||
this.hash = hash
|
||||
this.file = file
|
||||
this.server = data.server
|
||||
this.articlesPerPage = data.articlesPerPage || 5
|
||||
this.collectiveOrder = data.collectiveOrder || []
|
||||
this.articleCardDefaultPreview = data.articleCardDefaultPreview
|
||||
this.collectiveImage = data.collectiveImage
|
||||
|
||||
const redirect = data.redirect || {}
|
||||
this.redirect = new Map(Object
|
||||
.entries(redirect)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
const Data = require('./Data')
|
||||
const ImageArtifactType = require('./ImageArtifactType')
|
||||
const {findOne} = require('../lib/store')
|
||||
const { mapOf } = require('../server/lib')
|
||||
|
||||
const store = () => Data.getStore(Image)
|
||||
|
||||
class Image {
|
||||
static async findById(id) {
|
||||
const data = await findOne(store(), {_id: id})
|
||||
if (!data) return null
|
||||
|
||||
const artifacts = data.data
|
||||
return new Image({...data, artifacts})
|
||||
}
|
||||
|
||||
static async findByFile(file) {
|
||||
const data = await findOne(store(), {file})
|
||||
if (!data) return null
|
||||
|
||||
const artifacts = data.data
|
||||
return new Image({...data, artifacts})
|
||||
}
|
||||
|
||||
constructor({hash, file, artifacts}) {
|
||||
this.hash = hash
|
||||
this.file = file
|
||||
|
||||
this.artifacts = mapOf(ImageArtifact, artifacts)
|
||||
}
|
||||
|
||||
getArtifact(size) {
|
||||
return this.artifacts.get(size)
|
||||
}
|
||||
|
||||
findArtifact(sizes) {
|
||||
for (let size of sizes) {
|
||||
const a = this.getArtifact(size)
|
||||
if (a) return a
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
getPicture(size) {
|
||||
const retinaSize = ImageArtifactType.retina(size)
|
||||
|
||||
const a = this.getArtifact(size)
|
||||
const a2 = this.getArtifact(retinaSize)
|
||||
const srcset = !a2
|
||||
? []
|
||||
: [{
|
||||
url: a2.url,
|
||||
density: ImageArtifactType.RETINA_DENSITY,
|
||||
}]
|
||||
|
||||
return {
|
||||
src: a.url,
|
||||
width: a.width,
|
||||
height: a.height,
|
||||
set: srcset,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ImageArtifact {
|
||||
constructor({url, size, width, height}) {
|
||||
this.url = url
|
||||
this.size = size
|
||||
this.width = width
|
||||
this.height = height
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Image
|
||||
@@ -0,0 +1,81 @@
|
||||
import Data from './Data'
|
||||
import ImageArtifactType from './ImageArtifactType'
|
||||
import { findOne } from '../lib/store'
|
||||
import { mapOf } from '../server/lib'
|
||||
|
||||
const store = () => Data.getStore('Image')
|
||||
|
||||
export default class Image {
|
||||
static async findById(id) {
|
||||
const data = await findOne(store(), { _id: id })
|
||||
if (!data) return null
|
||||
|
||||
const artifacts = data.data
|
||||
return new Image({ ...data, artifacts })
|
||||
}
|
||||
|
||||
static async findByFile(file) {
|
||||
const data = await findOne(store(), { file })
|
||||
if (!data) return null
|
||||
|
||||
const artifacts = data.data
|
||||
return new Image({ ...data, artifacts })
|
||||
}
|
||||
public hash: any
|
||||
public file: any
|
||||
public artifacts: any
|
||||
|
||||
constructor({ hash, file, artifacts }) {
|
||||
this.hash = hash
|
||||
this.file = file
|
||||
|
||||
this.artifacts = mapOf(ImageArtifact, artifacts)
|
||||
}
|
||||
|
||||
getArtifact(size) {
|
||||
return this.artifacts.get(size)
|
||||
}
|
||||
|
||||
findArtifact(sizes) {
|
||||
for (let size of sizes) {
|
||||
const a = this.getArtifact(size)
|
||||
if (a) return a
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
getPicture(size) {
|
||||
const retinaSize = ImageArtifactType.retina(size)
|
||||
|
||||
const a = this.getArtifact(size)
|
||||
const a2 = this.getArtifact(retinaSize)
|
||||
const srcset = !a2
|
||||
? []
|
||||
: [{
|
||||
url: a2.url,
|
||||
density: ImageArtifactType.RETINA_DENSITY,
|
||||
}]
|
||||
|
||||
return {
|
||||
src: a.url,
|
||||
width: a.width,
|
||||
height: a.height,
|
||||
set: srcset,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ImageArtifact {
|
||||
public url: any
|
||||
public size: any
|
||||
public width: any
|
||||
public height: any
|
||||
|
||||
constructor({ url, size, width, height }) {
|
||||
this.url = url
|
||||
this.size = size
|
||||
this.width = width
|
||||
this.height = height
|
||||
}
|
||||
}
|
||||
+8
-7
@@ -1,11 +1,11 @@
|
||||
import Data from './Data'
|
||||
const Page = require('./Page')
|
||||
const Article = require('./Article')
|
||||
import Page from './Page'
|
||||
import Article from './Article'
|
||||
const Album = require('./Album')
|
||||
const Teacher = require('./Teacher')
|
||||
const Document = require('./Document')
|
||||
const Image = require('./Image')
|
||||
const Settings = require('./Config')
|
||||
import Settings from './Config'
|
||||
const getConfig = require('next/config').default
|
||||
|
||||
const { MongoClient, ObjectId } = require('mongodb')
|
||||
@@ -34,11 +34,12 @@ export function id(i) {
|
||||
}
|
||||
|
||||
function init(db) {
|
||||
// Data.setStore('Page', db.collection('pages'))
|
||||
Data.setStore(Page, db.collection('pages'))
|
||||
Data.setStore(Article, db.collection('articles'))
|
||||
console.log('INIT DB')
|
||||
|
||||
Data.setStore('Page', db.collection('pages'))
|
||||
Data.setStore('Article', db.collection('articles'))
|
||||
Data.setStore(Album, db.collection('albums'))
|
||||
Data.setStore(Image, db.collection('images'))
|
||||
Data.setStore('Image', db.collection('images'))
|
||||
Data.setStore(Teacher, db.collection('collective'))
|
||||
Data.setStore(Document, db.collection('documents'))
|
||||
Data.setStore(Settings, db.collection('settings'))
|
||||
|
||||
@@ -20,7 +20,7 @@ export async function findArticlesNin(nin, skip, limit, sort) {
|
||||
})
|
||||
}
|
||||
|
||||
export async function findArticles(page, pageSize) {
|
||||
export async function findArticles(page: number, pageSize: number) {
|
||||
const limit = pageSize
|
||||
const skip = (page - 1) * pageSize
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* @param Class
|
||||
* @param object
|
||||
*/
|
||||
exports.mapOf = function mapOf(Class, object) {
|
||||
export function mapOf(Class, object) {
|
||||
return Object
|
||||
.entries(object)
|
||||
.reduce((map, i) => (
|
||||
Reference in new issue
Block a user