Initial data model draft
interface User {
id: string
username: string
email: string
verifiedEmail: boolean
firstName: string
lastName: string
image: string
services: [string] // Service slug ids
skills: [string] // Skill slug ids
onlineAccounts [ // JSON instead of another table
{
type: string // account slug, e.g. twitter, github
url: string
}
]
roleStakepoolOperator: boolean
roleCommunityAdvisor: boolean
lookingToCollaborateOnProposals: boolean
createdAt: string
updatedAt: string
}
interface Skill {
id: string
name: string
}
interface Service {
id: string
name: string
}
interface Category {
id: string
name: string
}
interface SkillCategory {
skill: string // Skill slug id
category: string // Category slug id
}
interface ServiceCategory {
service: string // Service slug id
category: string // Category slug id
}
interface Tag {
id: string
name: string
}
interface Group {
id: string
name: string
}
interface TagGroup {
group: string
tag: string
}
interface Project {
id: string
name: string
description: string
onlineAccounts [ // JSON instead of another table
{
type: string
url: string
}
]
tags: [string] // Tag slug ids
owner: string // User id
members: [string] // User ids
createdAt: string
updatedAt: string
}
interface Currency {
code: string
name: string
symbol: string
}
enum ProposalStatus {
PENDING
FUNDED
ARCHIVED
}
interface Proposal {
// Data newly added to proposals to be made available on the API
id: string
fundCategoryId: string // id for FundCategory data model
tags: [string] // Link to Tag slug ids
currency: string // Currency code such as ADA or USD
status: string // Enum values such as PENDING, FUNDED, ARCHIVED
// Data extracted from Ideascale
title: string
problemDescription: string
solutionDescription: string
relevantExperience: string
outcomeObjectives: string
description: string
url: string
createdAt: string
requestedAmount: number
ideascaleId: number
ideascaleUrl: string
ideascale: {
stage: string
ideaNumber: number
author: string
commentsTotal: number
annotations: string
attachmentLinks: string
requestedAmountText: string
}
}
interface FundRound {
id: string
name: string // e.g. Fund 3
}
interface FundCategory {
id: string
fundRoundId: number
name: string
fundingAmount: number
currency: string
}
To keep some parts simple some data may not be stored in a database for the short term