fix: minor fixes and add csv import support

This commit is contained in:
lefuturiste 2020-07-27 12:06:09 +00:00
parent 289e7839c6
commit fefbf15f5e
6 changed files with 73 additions and 32 deletions

View file

@ -94,8 +94,8 @@ function renderCard(organization) {
// image // image
let image = createEl('card-image-container') let image = createEl('card-image-container')
let imageTag = createEl('card-image') let imageTag = createEl('card-image')
//mediaBaseUrl + '/' +
imageTag.style = `background-image: url('${organization.thumbnail}')` imageTag.style = `background-image: url('${mediaBaseUrl + '/' + organization.thumbnail}')`
image.appendChild(imageTag) image.appendChild(imageTag)
card.appendChild(image) card.appendChild(image)

View file

@ -16,7 +16,7 @@
"@types/multer-s3": "^2.7.7", "@types/multer-s3": "^2.7.7",
"@types/mustache": "^4.0.1", "@types/mustache": "^4.0.1",
"@types/nodemailer": "^6.4.0", "@types/nodemailer": "^6.4.0",
"@types/papaparse": "^5.0.4", "@types/papaparse": "^5.0.6",
"@types/sanitize-html": "^1.23.3", "@types/sanitize-html": "^1.23.3",
"@types/twig": "^1.12.3", "@types/twig": "^1.12.3",
"aws-sdk": "^2.706.0", "aws-sdk": "^2.706.0",

View file

@ -6,6 +6,7 @@ import slugify from 'slugify'
import { Document } from 'mongoose' import { Document } from 'mongoose'
import MediaService from '../MediaService' import MediaService from '../MediaService'
import Utils from '../Utils' import Utils from '../Utils'
import Papa from 'papaparse'
export default class AdminOrganizationController { export default class AdminOrganizationController {
static getMany(req: express.Request, res: express.Response) { static getMany(req: express.Request, res: express.Response) {
@ -21,10 +22,37 @@ export default class AdminOrganizationController {
static import(req: express.Request, res: express.Response) { static import(req: express.Request, res: express.Response) {
// first column is always name // first column is always name
// second column is always email // second column is always email
const data = req.body.csv const input = req.body.data
res.json({ const parsed = Papa.parse(input)
success: true, if (parsed.errors.length > 0) {
data return res
.status(400)
.json({
success: false,
errors: parsed.errors,
_note: 'Invalid import data or csv'
})
}
let promises = parsed.data.map(d => {
return AdminOrganizationController.storeUniversal(
d[0],
d[1].replace(' ', ''),
'unaware'
)
})
Promise.all(promises).then(data => {
res.json({
success: true,
input,
parsed,
data
})
}).catch(errors => {
console.log(errors)
res.status(400).json({
success: false,
errors
})
}) })
} }
@ -78,9 +106,8 @@ export default class AdminOrganizationController {
} }
} }
} }
console.log(body)
Organization.create(body).then(data => { Organization.create(body).then(data => {
AdminOrganizationController.sendEmailTokenUniversal(data) //AdminOrganizationController.sendEmailTokenUniversal(data)
resolve({ data, body }) resolve({ data, body })
}).catch(err => reject(err)) }).catch(err => reject(err))
}) })

View file

@ -31,23 +31,23 @@ export default class PublicController {
if (!isProposed) { if (!isProposed) {
organizations = organizations.filter(o => o.get('publishedAt') !== undefined && o.get('publishedAt') !== null) organizations = organizations.filter(o => o.get('publishedAt') !== undefined && o.get('publishedAt') !== null)
} }
// let organizationsData = organizations let organizationsData = organizations
// .map(o => { .map(o => {
// const version = isProposed ? o.get('proposedVersion'): o.get('publishedVersion') const version = isProposed ? o.get('proposedVersion'): o.get('publishedVersion')
// return { return {
// _id: o._id, _id: o._id,
// name: version.name, name: version.name,
// description: version.descriptionShort, description: version.descriptionShort,
// thumbnail: version.thumbnail.key, thumbnail: version.thumbnail.key,
// tags: version.tags === null ? 'tags_not_found' : version.tags, tags: version.tags === null ? 'tags_not_found' : version.tags,
// slug: o.get('slugs')[o.get('slugs).length -1] slug: o.get('slugs')[o.get('slugs').length -1]
// } }
// }) })
let lorem = "Dolore sit tempor et duo ipsum sit sed takimata, et magna voluptua ut sed justo eirmod. Sed tempor justo magna accusam aliquyam sea invidunt eos. Aliquyam accusam vero accusam sed" // let lorem = "Dolore sit tempor et duo ipsum sit sed takimata, et magna voluptua ut sed justo eirmod. Sed tempor justo magna accusam aliquyam sea invidunt eos. Aliquyam accusam vero accusam sed"
let organizationsData = [] // let organizationsData = []
for (var i = 0; i < 40; i++) { // for (var i = 0; i < 40; i++) {
organizationsData.push({ _id: i, name: 'Item ' + i, description: lorem, thumbnail: 'https://picsum.photos/800?hash=' + i, slug: 'qsd-'+i, tags: ['5f0e00e1a4dbfe3e0b5291d2'] }) // organizationsData.push({ _id: i, name: 'Item ' + i, description: lorem, thumbnail: 'https://picsum.photos/800?hash=' + i, slug: 'qsd-'+i, tags: ['5f0e00e1a4dbfe3e0b5291d2'] })
} // }
res.render('home.twig', { res.render('home.twig', {
isProposed, isProposed,
mediaBaseUrl: MediaService.getMediaBaseUrl(), mediaBaseUrl: MediaService.getMediaBaseUrl(),

View file

@ -26,6 +26,20 @@ class AllowedString extends mongoose.SchemaType {
} }
} }
const email = {
type: String,
trim: true,
lowercase: true,
unique: true,
validate: {
validator: function(v) {
return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v);
},
message: "Invalid email"
},
required: [true, "Email required"]
}
// @ts-ignore // @ts-ignore
mongoose.Schema.Types['AllowedString'] = AllowedString mongoose.Schema.Types['AllowedString'] = AllowedString
@ -61,7 +75,7 @@ const OrganizationVersion = {
phone: { type: String }, phone: { type: String },
peoples: [{ peoples: [{
name: { type: String }, name: { type: String },
email: { type: String }, email,
phone: { type: String }, phone: { type: String },
role: { type: String } role: { type: String }
}] }]
@ -85,7 +99,7 @@ const OrganizationVersion = {
const Organization = new Schema({ const Organization = new Schema({
adminName: { type: String, required: true }, adminName: { type: String, required: true },
email: { type: String, required: true }, email,
token: { type: String, required: true }, token: { type: String, required: true },
slugs: [{ type: String }], // aliases system slugs: [{ type: String }], // aliases system
validationState: { validationState: {

View file

@ -743,10 +743,10 @@
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
"@types/papaparse@^5.0.4": "@types/papaparse@^5.0.6":
version "5.0.4" version "5.0.6"
resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.0.4.tgz#70792c74d9932bcc0bfa945ae7dacfef67f4ee57" resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.0.6.tgz#4fee1a17dc24fed839d276c807f875bd653abbb4"
integrity sha512-jFv9NcRddMiW4+thmntwZ1AhvMDAX4+tAUDkWWbNcIzgqyjjkuSHOEUPoVh1/gqJTWfDOD1tvl+hSp88W3UtqA== integrity sha512-fCQnycsOSviVLtxuydQ82IhTAv1lSPIA8zY3sYaRHI00lERsa7QSA616HsQZixqEF2asGXZag3hM13N8bm/jAw==
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"