Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,6 @@ dist
.yarn/install-state.gz
.pnp.*

.DS_STORE
.DS_STORE

tfsshc-firebase-adminsdk-ec0s9-d1db43875f.json
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"@typescript-eslint/parser": "^4.1.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"firebase": "^7.24.0",
"ts-node": "^8.10.2",
"typescript": "^3.9.5"
},
Expand Down
9 changes: 9 additions & 0 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,12 @@ export const { signing_secret } = process.env
export const { token } = process.env
export const { club_channel } = process.env
export const name = 'Duino'

export const { apiKey } = process.env
export const { authDomain } = process.env
export const { databaseURL } = process.env
export const { projectId } = process.env
export const { storageBucket } = process.env
export const { messagingSenderId } = process.env
export const { appId } = process.env
export const { measurementId } = process.env
Empty file added src/features/fun/index.ts
Empty file.
Empty file added src/features/messages/index.ts
Empty file.
Empty file added src/features/staff/index.ts
Empty file.
Empty file added src/features/streaming/index.ts
Empty file.
34 changes: 32 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,47 @@
import { App } from '@slack/bolt'
import { signing_secret, token, name } from './config'
import { initializeApp } from 'firebase/app'
import 'firebase/firestore'
import 'firebase/storage'
import {
signing_secret,
token,
name,
apiKey,
authDomain,
databaseURL,
projectId,
storageBucket,
messagingSenderId,
appId,
measurementId,
} from './config'
import * as features from './features/index'

export const app = new App({
signingSecret: signing_secret,
token,
})

export const firebase = initializeApp({
apiKey,
authDomain,
databaseURL,
projectId,
storageBucket,
messagingSenderId,
appId,
measurementId,
})

export const storage = firebase.storage()
export const db = firebase.firestore()
;(async () => {
// Start your app
await app.start(process.env.PORT || 3000)

console.log(`${name} is running! 🔥`)

console.log('running on:', firebase.name)

for (const [feature, handler] of Object.entries(features)) {
handler(app)
console.log(`Feature "${feature}" has been loaded.`)
Expand Down
96 changes: 96 additions & 0 deletions src/util/db/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { db } from '../../index'
import { Member, Project } from '../types/index'

export const getMember = async (
id: string
): Promise<Partial<Member> | null> => {
const _data = await db.collection('members').doc(id).get()

if (_data.exists) {
const data = _data.data()

const { name, age, projects } = data

return {
id,
name,
age,
projects,
}
}

return null
}

export const getProject = async (
id: string
): Promise<Partial<Project> | null> => {
const _data = await db.collection('projects').doc(id).get()

if (_data.exists) {
const data = _data.data()

const { url, makers, github, title, description, date, created } = data

return {
id,
url,
makers,
github,
title,
description,
date,
created,
}
}

return null
}

export const getUserProjects = async (
id: string
): Promise<Partial<Project>[] | null> => {
const user = await getMember(id)

if (user.projects) {
const projects = await Promise.all(
user.projects.map((project) => getProject(project))
)

if (projects) {
return projects
}
}

return null
}

export const setMember = async (id: string, data: Partial<Member>) => {
const user = await getMember(id)

if (!user) {
return db.collection('users').doc(id).set(data)
}

const updatedUser = {
...user,
...data,
}

return db.collection('users').doc(id).set(updatedUser)
}

export const setProject = async (id: string, data: Partial<Project>) => {
const project = await getProject(id)

if (!project) {
return db.collection('projects').doc(id).set(data)
}

const updatedProject = {
...project,
...data,
}

return db.collection('projects').doc(id).set(updatedProject)
}
19 changes: 19 additions & 0 deletions src/util/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { firestore } from 'firebase'

export interface Member {
id?: string
name: string
age: number
projects: string[]
}

export interface Project {
id?: string
url: string
makers: string[]
github: string
title: string
description: string
date: string
created: firestore.Timestamp
}
Loading