forked from kaverti/website
commit1
This commit is contained in:
parent
e72dc7b594
commit
2d3e27197b
|
@ -992,7 +992,7 @@ export default {
|
||||||
experimentsTemp: {"wall":false,"theme":"light","relationships":false,"teams":false,"marketplace":false, "newsettings": true},
|
experimentsTemp: {"wall":false,"theme":"light","relationships":false,"teams":false,"marketplace":false, "newsettings": true},
|
||||||
loadingLogout: false,
|
loadingLogout: false,
|
||||||
showMenu: false,
|
showMenu: false,
|
||||||
connModal: true,
|
connModal: false,
|
||||||
settingsModal: false,
|
settingsModal: false,
|
||||||
showConfirmModal: false,
|
showConfirmModal: false,
|
||||||
ajaxErrorHandler: AjaxErrorHandler(this.$store)
|
ajaxErrorHandler: AjaxErrorHandler(this.$store)
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
<template v-if='userData'>
|
<template v-if='userData'>
|
||||||
<div class='avatar_icon__header'>
|
<div class='avatar_icon__header'>
|
||||||
<figure class="picture_circle">
|
<figure class="picture_circle">
|
||||||
<img
|
T
|
||||||
:src = pictureURL
|
|
||||||
>
|
|
||||||
</figure>
|
</figure>
|
||||||
<div class='avatar_icon__header_info'>
|
<div class='avatar_icon__header_info'>
|
||||||
<span class='avatar_icon__username' @click.stop='goToUser'>
|
<span class='avatar_icon__username' @click.stop='goToUser'>
|
||||||
|
@ -32,9 +30,7 @@
|
||||||
"avatar_icon__icon--tiny": size === "tiny"
|
"avatar_icon__icon--tiny": size === "tiny"
|
||||||
}'
|
}'
|
||||||
@click.stop="goToUser">
|
@click.stop="goToUser">
|
||||||
<img
|
T
|
||||||
:src = pictureURL
|
|
||||||
>
|
|
||||||
</figure>
|
</figure>
|
||||||
</info-tooltip>
|
</info-tooltip>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
<template slot='menu'>
|
<template slot='menu'>
|
||||||
<div
|
<div
|
||||||
class='menu_button__option'
|
class='menu_button__option'
|
||||||
:class='{"button": option.value === value}'
|
:class='{"button": option.name === "test"}'
|
||||||
:key='"menu-button-option-" + option.value + "-" + $index'
|
:key='"menu-button-option-" + option.name + "-" + $index'
|
||||||
v-for='(option, $index) in options'
|
v-for='(option, $index) in options'
|
||||||
@click='select(option.value)'
|
@click='select(option.name)'
|
||||||
:style="{ 'border-bottom' : $index === options.length-1 ? 'none' : 'solid thin rgb(245, 245, 245)' }"
|
:style="{ 'border-bottom' : $index === options.length-1 ? 'none' : 'solid thin rgb(245, 245, 245)' }"
|
||||||
>
|
>
|
||||||
{{option.name}}
|
{{option.name}}
|
||||||
|
|
|
@ -0,0 +1,364 @@
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class='post'
|
||||||
|
:class='{
|
||||||
|
"post--highlighted": highlight,
|
||||||
|
"post--selected": selected
|
||||||
|
}'
|
||||||
|
@mouseenter='hover = true'
|
||||||
|
@mouseleave='hover = false'
|
||||||
|
>
|
||||||
|
|
||||||
|
|
||||||
|
<div class='post__meta_data'>
|
||||||
|
<div style='display: inline-flex;'>
|
||||||
|
<avatar-icon :user='post.User' class='post__avatar'></avatar-icon>
|
||||||
|
<div class='post__thread' v-if='showThread' @click.stop='goToThread'>
|
||||||
|
·
|
||||||
|
</div>
|
||||||
|
<div class='post__user' v-else>
|
||||||
|
PLACEHOLDER-USERNAME
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
PLACEHOLDER DATE</div>
|
||||||
|
<div class='post__date post__date--mobile'>PLACEHOLDER DATE</div>
|
||||||
|
<div
|
||||||
|
tabindex='-1'
|
||||||
|
class='post__content'
|
||||||
|
v-html='postContentHTML'
|
||||||
|
@mouseup='setShowQuote'
|
||||||
|
@blur='showQuote = false'
|
||||||
|
></div>
|
||||||
|
<div class='post__footer'>
|
||||||
|
<div
|
||||||
|
class='post__footer_group'
|
||||||
|
>
|
||||||
|
<div class='post__footer_sub_group'>
|
||||||
|
<heart-button :post='post' v-if='showReply'></heart-button>
|
||||||
|
</div>
|
||||||
|
<div class='post__footer_sub_group' v-if='post.Replies.length'>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='post__replies'>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ModalWindow from './ModalWindow'
|
||||||
|
import AvatarIcon from './AvatarIcon'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'ThreadPost',
|
||||||
|
props: [
|
||||||
|
'post',
|
||||||
|
'highlight',
|
||||||
|
'showReply',
|
||||||
|
'showThread',
|
||||||
|
'showSelect',
|
||||||
|
'clickForPost',
|
||||||
|
'allowQuote'
|
||||||
|
],
|
||||||
|
components: {
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
|
ModalWindow,
|
||||||
|
AvatarIcon,
|
||||||
|
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
let post = this.post
|
||||||
|
|
||||||
|
return {
|
||||||
|
hover: false,
|
||||||
|
showShareModal: false,
|
||||||
|
showReportPostModal: false,
|
||||||
|
postURL: `${location.origin}/p/${post.id}`,
|
||||||
|
selected: false,
|
||||||
|
|
||||||
|
showQuote: false,
|
||||||
|
quoteX: 0,
|
||||||
|
quoteY: 0,
|
||||||
|
quoteSelection: '',
|
||||||
|
|
||||||
|
postContentHTML: this.$store.state.thread.content
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
username () {
|
||||||
|
if(this.post.User) {
|
||||||
|
return this.post.User.username
|
||||||
|
} else {
|
||||||
|
return '[deleted]'}
|
||||||
|
},
|
||||||
|
showActions () {
|
||||||
|
return this.hover || this.showShareModal || this.showReportPostModal
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
emitReply () {
|
||||||
|
this.showQuote = false;
|
||||||
|
this.$emit('reply', this.post.id, this.username, this.quoteSelection);
|
||||||
|
},
|
||||||
|
setShowQuote () {
|
||||||
|
let rootCoords = this.$el.getBoundingClientRect();
|
||||||
|
|
||||||
|
let selection = window.getSelection();
|
||||||
|
let coords = selection.getRangeAt(0).getBoundingClientRect();
|
||||||
|
let text = selection.toString();
|
||||||
|
|
||||||
|
if(text.length) {
|
||||||
|
this.quoteY = coords.top - rootCoords.top - 30;
|
||||||
|
this.quoteX = coords.left - rootCoords.left;
|
||||||
|
this.quoteSelection = '> ' + text.replace(/\n/g, '\n> ') + '\n\n';
|
||||||
|
this.showQuote = true;
|
||||||
|
} else {
|
||||||
|
this.showQuote = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setShareModalState (val) {
|
||||||
|
this.showShareModal = val
|
||||||
|
},
|
||||||
|
setShowReportPostModal (val) {
|
||||||
|
this.showReportPostModal = val
|
||||||
|
},
|
||||||
|
goToThread () {
|
||||||
|
this.$router.push(`/thread/${this.post.Thread.id}`)
|
||||||
|
},
|
||||||
|
goToPost () {
|
||||||
|
if(this.clickForPost) {
|
||||||
|
this.$router.push(
|
||||||
|
'/thread/' +
|
||||||
|
this.post.Thread.id + '/' +
|
||||||
|
this.post.postNumber
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toggleSelected () {
|
||||||
|
this.selected = !this.selected
|
||||||
|
|
||||||
|
this.$emit('selected', this.post.id)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
showSelect () {
|
||||||
|
if(this.selected) {
|
||||||
|
this.$emit('selected', this.post.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.selected = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$linkExpander(this.post.content, v => this.postContentHTML = v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='scss' scoped>
|
||||||
|
@import '../assets/scss/variables.scss';
|
||||||
|
|
||||||
|
@keyframes shake {
|
||||||
|
0% {
|
||||||
|
left: 0rem;
|
||||||
|
}
|
||||||
|
25% {
|
||||||
|
left: -0.5rem;
|
||||||
|
}
|
||||||
|
75% {
|
||||||
|
left: 0.5rem;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
left: 0rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.post {
|
||||||
|
position: relative;
|
||||||
|
border-bottom: thin solid $color__gray--darker;
|
||||||
|
transition: background-color 0.5s;
|
||||||
|
margin: 0.5rem -0.5rem;
|
||||||
|
padding: 0 0.5rem;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
|
||||||
|
@at-root #{&}--highlighted {
|
||||||
|
animation-name: shake;
|
||||||
|
animation-iteration-count: 5;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-duration: 0.25s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}--last {
|
||||||
|
border-bottom: none;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}__quote {
|
||||||
|
background: #464646;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
box-shadow: 0px 2px 0.25rem $color__gray--darkest;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
left: 70px;
|
||||||
|
opacity: 0;
|
||||||
|
padding: 0.25rem 0.4rem;
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 19px;
|
||||||
|
transition: opacity 0.1s;
|
||||||
|
z-index: 3;
|
||||||
|
|
||||||
|
@at-root #{&}--show {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}__icon {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
padding: 0 0.125rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@at-root #{&}__remove_icon {
|
||||||
|
position: absolute;
|
||||||
|
right: 2rem;
|
||||||
|
top: 0rem;
|
||||||
|
color: #fff;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: gray;
|
||||||
|
z-index: 1;
|
||||||
|
border-radius: 100%;
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
padding: 0.25rem;
|
||||||
|
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
@at-root #{&}--show {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@at-root #{&}--selected {
|
||||||
|
transform: scale(0.95);
|
||||||
|
padding: 1rem;
|
||||||
|
background-color: $color__lightgray--primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}__meta_data {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
position: relative;
|
||||||
|
margin-left: 4rem;
|
||||||
|
}
|
||||||
|
@at-root #{&}__avatar {
|
||||||
|
position: absolute;
|
||||||
|
left: -4rem;
|
||||||
|
}
|
||||||
|
@at-root #{&}__user {
|
||||||
|
@include text($font--role-default, 1rem, 600);
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
@at-root #{&}__thread {
|
||||||
|
color: $color__text--secondary;
|
||||||
|
|
||||||
|
@at-root #{&}__name {
|
||||||
|
cursor: pointer;
|
||||||
|
@include text($font--role-default, 1rem, 600);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $color__darkgray--primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@at-root #{&}__date {
|
||||||
|
|
||||||
|
@at-root #{&}--mobile {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@at-root #{&}__content {
|
||||||
|
padding: 0 0.5rem 0 4rem;
|
||||||
|
outline: none;
|
||||||
|
word-wrap: anywhere;
|
||||||
|
}
|
||||||
|
@at-root #{&}__footer {
|
||||||
|
padding: 0.5rem 0 0.75rem 0.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
|
||||||
|
@at-root #{&}_sub_group {
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
margin-right: 1rem;
|
||||||
|
|
||||||
|
@at-root #{&}__text {
|
||||||
|
font-variant: small-caps;
|
||||||
|
margin: 0 0.25rem;
|
||||||
|
margin-left: 0;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
position: relative;
|
||||||
|
bottom: 0.1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}_group {
|
||||||
|
align-items: center;
|
||||||
|
display: inline-flex;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@at-root #{&}__action {
|
||||||
|
color: $color__darkgray--primary;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-right: 0.75rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-variant: small-caps;
|
||||||
|
position: relative;
|
||||||
|
bottom: 0.1rem;
|
||||||
|
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $color__darkgray--darkest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@at-root #{&}__actions {
|
||||||
|
opacity: 0;
|
||||||
|
|
||||||
|
@at-root #{&}--show {
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 420px) {
|
||||||
|
.post {
|
||||||
|
@at-root #{&}__actions {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}__content {
|
||||||
|
padding: 0 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root #{&}__date {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
@at-root #{&}--mobile {
|
||||||
|
display: block;
|
||||||
|
padding-left: 4rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -11,7 +11,7 @@
|
||||||
<div style='width: calc(100% - 3rem);' @click='goToThread'>
|
<div style='width: calc(100% - 3rem);' @click='goToThread'>
|
||||||
<div class='thread_display__header'>
|
<div class='thread_display__header'>
|
||||||
<span class='thread_display__name'>
|
<span class='thread_display__name'>
|
||||||
{{thread.name}}
|
{{thread.title}}
|
||||||
</span>
|
</span>
|
||||||
<div class='thread_display__meta_bar'>
|
<div class='thread_display__meta_bar'>
|
||||||
<div>
|
<div>
|
||||||
|
@ -31,13 +31,12 @@
|
||||||
>
|
>
|
||||||
<font-awesome-icon :icon='["fa", "reply"]' fixed-width />
|
<font-awesome-icon :icon='["fa", "reply"]' fixed-width />
|
||||||
<span class='thread_display__latest_reply__text'>Latest reply by </span>
|
<span class='thread_display__latest_reply__text'>Latest reply by </span>
|
||||||
<span class='thread_display__username'>{{replyUsername}}</span>
|
|
||||||
·
|
·
|
||||||
<span class='thread_display__date'>{{thread.Posts[1].createdAt | formatDate}}</span>
|
<span class='thread_display__date'>{{thread.Posts[1].createdAt | formatDate}}</span>
|
||||||
</div>
|
</div>
|
||||||
<span title='Replies to thread' v-if="thread.Posts[0]">
|
<span title='Replies to thread' v-if="thread.Posts[0]">
|
||||||
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
||||||
{{thread.postsCount - 1}}
|
{{thread.replies}}
|
||||||
</span>
|
</span>
|
||||||
<span title='Replies to thread' v-else>
|
<span title='Replies to thread' v-else>
|
||||||
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
||||||
|
@ -45,7 +44,7 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class='thread_display__content'>
|
<div class='thread_display__content'>
|
||||||
{{threadContent.content | stripTags | truncate(150)}}
|
{{threadContent | stripTags | truncate(150)}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
@ -68,15 +67,9 @@
|
||||||
return '[deleted]'
|
return '[deleted]'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
replyUsername () {
|
|
||||||
if(this.thread.Posts[1].User) {
|
|
||||||
return this.thread.Posts[1].User.username
|
|
||||||
} else {
|
|
||||||
return '[deleted]'}
|
|
||||||
},
|
|
||||||
threadContent() {
|
threadContent() {
|
||||||
if(this.thread.Posts[0]) {
|
if(this.thread.content) {
|
||||||
return this.thread.Posts[0]
|
return this.thread.content
|
||||||
} else {
|
} else {
|
||||||
return {id: "0", content: 'Uninitialized Thread', createdAt: "2020-10-10T15:40:51.000Z", updatedAt: "2020-10-10T15:40:51.000Z"}
|
return {id: "0", content: 'Uninitialized Thread', createdAt: "2020-10-10T15:40:51.000Z", updatedAt: "2020-10-10T15:40:51.000Z"}
|
||||||
}
|
}
|
||||||
|
@ -84,10 +77,10 @@
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
goToUser () {
|
goToUser () {
|
||||||
this.$router.push('/user/' + this.thread.User.username)
|
this.$router.push('/u/' + this.thread.User.username)
|
||||||
},
|
},
|
||||||
goToThread () {
|
goToThread () {
|
||||||
this.$router.push('/thread/' + this.thread.slug + '/' + this.thread.id)
|
this.$router.push('/thread/' + this.thread.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,34 +43,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class='post__user' v-else>
|
<div class='post__user' v-else>
|
||||||
{{username}}
|
{{username}}
|
||||||
<b-tooltip v-if='post.User.system' class="is-success" label="This user is a system user operated by administrators that mainly run API operations.">
|
|
||||||
<b-tag rounded class="is-success">SYSTEM <i class="fas fa-info-circle"></i></b-tag>
|
|
||||||
</b-tooltip>
|
|
||||||
|
|
||||||
<b-tooltip v-if='post.User.bot' class="is-info" label="This user is a bot account that can run automated API operations.">
|
|
||||||
<b-tag rounded class="is-info">BOT <i class="fas fa-info-circle"></i></b-tag>
|
|
||||||
</b-tooltip>
|
|
||||||
|
|
||||||
<b-tooltip v-if='post.User.admin' class="is-danger" label="User is an official Kaverti administrator.">
|
|
||||||
<b-tag class="is-danger" rounded>ADMIN <i class="fas fa-info-circle"></i></b-tag>
|
|
||||||
</b-tooltip>
|
|
||||||
|
|
||||||
<b-tooltip v-if='post.User.hidden' class="is-info" label="User is not discoverable in the user list.">
|
|
||||||
<b-tag rounded>HIDDEN <i class="fas fa-info-circle"></i></b-tag>
|
|
||||||
</b-tooltip>
|
|
||||||
|
|
||||||
<b-tooltip v-if='post.User.booster' class="is-primary" label="User is boosting the Kaverti Discord server.">
|
|
||||||
<b-tag class="is-primary" rounded>BOOSTER <i class="fas fa-info-circle"></i></b-tag>
|
|
||||||
</b-tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<replying-to
|
|
||||||
style='margin-right: 0.5rem;'
|
|
||||||
v-if='post.replyingToUsername'
|
|
||||||
:replyId='post.replyId'
|
|
||||||
:username='post.replyingToUsername'
|
|
||||||
@click='$emit("goToPost", post.replyId, true)'
|
|
||||||
></replying-to>
|
|
||||||
</div>
|
</div>
|
||||||
<div class='post__date'>{{post.createdAt | formatDate('time|date', ', ')}}</div>
|
<div class='post__date'>{{post.createdAt | formatDate('time|date', ', ')}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -93,27 +66,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
class='post__footer_group post__actions'
|
|
||||||
:class='{ "post__actions--show": showActions }'
|
|
||||||
v-if='!post.removed'
|
|
||||||
>
|
|
||||||
<div class='post__action post__share' @click.stop='setShareModalState(true)'>share</div>
|
|
||||||
<div
|
|
||||||
class='post__action'
|
|
||||||
@click.stop='setShowReportPostModal(true)'
|
|
||||||
v-if='$store.state.username'
|
|
||||||
>
|
|
||||||
report
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class='post__action post__reply'
|
|
||||||
v-if='$store.state.username && showReply'
|
|
||||||
@click.stop='$emit("reply", post.id, username)'
|
|
||||||
>
|
|
||||||
reply
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class='post__replies'>
|
<div class='post__replies'>
|
||||||
</div>
|
</div>
|
||||||
|
@ -121,9 +73,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import HeartButton from './HeartButton'
|
|
||||||
import ModalWindow from './ModalWindow'
|
import ModalWindow from './ModalWindow'
|
||||||
import ReplyingTo from './ReplyingTo'
|
|
||||||
import AvatarIcon from './AvatarIcon'
|
import AvatarIcon from './AvatarIcon'
|
||||||
import ReportPostModal from './ReportPostModal'
|
import ReportPostModal from './ReportPostModal'
|
||||||
|
|
||||||
|
@ -140,9 +90,7 @@
|
||||||
],
|
],
|
||||||
components: {
|
components: {
|
||||||
ModalWindow,
|
ModalWindow,
|
||||||
ReplyingTo,
|
|
||||||
AvatarIcon,
|
AvatarIcon,
|
||||||
HeartButton,
|
|
||||||
ReportPostModal
|
ReportPostModal
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
|
@ -202,13 +150,12 @@
|
||||||
this.showReportPostModal = val
|
this.showReportPostModal = val
|
||||||
},
|
},
|
||||||
goToThread () {
|
goToThread () {
|
||||||
this.$router.push(`/thread/${this.post.Thread.slug}/${this.post.Thread.id}`)
|
this.$router.push(`/thread/${this.post.Thread.id}`)
|
||||||
},
|
},
|
||||||
goToPost () {
|
goToPost () {
|
||||||
if(this.clickForPost) {
|
if(this.clickForPost) {
|
||||||
this.$router.push(
|
this.$router.push(
|
||||||
'/thread/' +
|
'/thread/' +
|
||||||
this.post.Thread.slug + '/' +
|
|
||||||
this.post.Thread.id + '/' +
|
this.post.Thread.id + '/' +
|
||||||
this.post.postNumber
|
this.post.postNumber
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
:key='"category-link-" + $index'
|
:key='"category-link-" + $index'
|
||||||
|
|
||||||
class='threads_main__side_bar__menu_item'
|
class='threads_main__side_bar__menu_item'
|
||||||
:class='{"threads_main__side_bar__menu_item--selected": category.value === selectedCategory}'
|
:class='{"threads_main__side_bar__menu_item--selected": category.name === selectedCategory}'
|
||||||
:to='"/category/" + category.value'
|
:to='"/category/" + category.name'
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
class='threads_main__side_bar__menu_item__border'
|
class='threads_main__side_bar__menu_item__border'
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
<span
|
<span
|
||||||
class='threads_main__side_bar__menu_item__text'
|
class='threads_main__side_bar__menu_item__text'
|
||||||
:style='{
|
:style='{
|
||||||
"color": category.value === selectedCategory ? category.color : undefined
|
"color": category.name === selectedCategory ? category.color : undefined
|
||||||
}'
|
}'
|
||||||
>{{category.name}}</span>
|
>{{category.name}}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
@ -83,7 +83,6 @@
|
||||||
<scroll-load
|
<scroll-load
|
||||||
key='threads'
|
key='threads'
|
||||||
class='threads_main__threads'
|
class='threads_main__threads'
|
||||||
v-else-if='filteredThreads.length'
|
|
||||||
:loading='loading'
|
:loading='loading'
|
||||||
@loadNext='getThreads'
|
@loadNext='getThreads'
|
||||||
>
|
>
|
||||||
|
@ -95,7 +94,7 @@
|
||||||
Load {{newThreads}} new {{newThreads | pluralize('thread')}}
|
Load {{newThreads}} new {{newThreads | pluralize('thread')}}
|
||||||
</div>
|
</div>
|
||||||
<thread-display
|
<thread-display
|
||||||
v-for='thread in filteredThreads'
|
v-for='thread in threads'
|
||||||
:thread='thread'
|
:thread='thread'
|
||||||
:key='"thread-display-" + thread.id'
|
:key='"thread-display-" + thread.id'
|
||||||
></thread-display>
|
></thread-display>
|
||||||
|
@ -104,11 +103,6 @@
|
||||||
</thread-display-placeholder>
|
</thread-display-placeholder>
|
||||||
</template>
|
</template>
|
||||||
</scroll-load>
|
</scroll-load>
|
||||||
|
|
||||||
<div key='no threads' v-else class='threads_main__threads overlay_message'>
|
|
||||||
<font-awesome-icon :icon='["fa", "exclamation-circle"]' />
|
|
||||||
No threads or posts.
|
|
||||||
</div>
|
|
||||||
</transition>
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -136,9 +130,9 @@
|
||||||
return {offset: 0,
|
return {offset: 0,
|
||||||
users: [],
|
users: [],
|
||||||
filterOptions: [
|
filterOptions: [
|
||||||
{name: 'New', value: 'NEW'},
|
{name: 'New'},
|
||||||
{name: 'Most active', value: 'MOST_ACTIVE'},
|
{name: 'Most active'},
|
||||||
{name: 'No replies', value: 'NO_REPLIES'}
|
{name: 'No replies'}
|
||||||
],
|
],
|
||||||
selectedFilterOption: 'NEW',
|
selectedFilterOption: 'NEW',
|
||||||
|
|
||||||
|
@ -156,13 +150,13 @@
|
||||||
var categories = {};
|
var categories = {};
|
||||||
var filter = this.selectedFilterOption
|
var filter = this.selectedFilterOption
|
||||||
this.$store.state.meta.categories.forEach(category => {
|
this.$store.state.meta.categories.forEach(category => {
|
||||||
categories[category.value] = category.name;
|
categories[category.name] = category.name;
|
||||||
});
|
});
|
||||||
return this.threads.filter(thread => {
|
return this.threads.filter(thread => {
|
||||||
return (thread.Category.value === this.selectedCategory) || (this.selectedCategory === 'ALL');
|
return (thread.Category.name === this.selectedCategory) || (this.selectedCategory === 'ALL');
|
||||||
}).map(thread => {
|
}).map(thread => {
|
||||||
var _thread = Object.assign({}, thread);
|
var _thread = Object.assign({}, thread);
|
||||||
_thread.category = categories[thread.Category.value];
|
_thread.category = categories[thread.Category.name];
|
||||||
return _thread;
|
return _thread;
|
||||||
}).sort((a, b) => {
|
}).sort((a, b) => {
|
||||||
if(filter === 'NEW') {
|
if(filter === 'NEW') {
|
||||||
|
@ -170,10 +164,10 @@
|
||||||
let bDate = new Date(b.Posts[0].createdAt)
|
let bDate = new Date(b.Posts[0].createdAt)
|
||||||
return bDate - aDate;
|
return bDate - aDate;
|
||||||
} else if(filter === 'MOST_ACTIVE') {
|
} else if(filter === 'MOST_ACTIVE') {
|
||||||
return b.postsCount - a.postsCount;
|
return b.replies - a.replies;
|
||||||
}
|
}
|
||||||
}).filter(thread => {
|
}).filter(thread => {
|
||||||
if(filter === 'NO_REPLIES' && thread.postsCount-1) {
|
if(filter === 'NO_REPLIES' && thread.replies) {
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
@ -185,7 +179,7 @@
|
||||||
},
|
},
|
||||||
selectedCategory: {
|
selectedCategory: {
|
||||||
set (val) {
|
set (val) {
|
||||||
let name = this.categories.find(c => c.value === val)
|
let name = this.categories.find(c => c.name === val)
|
||||||
|
|
||||||
this.$store.dispatch('setTitle', name ? name.name : '')
|
this.$store.dispatch('setTitle', name ? name.name : '')
|
||||||
this.$store.commit('setSelectedCategory', val)
|
this.$store.commit('setSelectedCategory', val)
|
||||||
|
@ -303,7 +297,7 @@
|
||||||
|
|
||||||
this.$socket.emit('join', 'index')
|
this.$socket.emit('join', 'index')
|
||||||
this.$socket.on('new thread', data => {
|
this.$socket.on('new thread', data => {
|
||||||
if(data.value === this.selectedCategory || this.selectedCategory == 'ALL') {
|
if(data.name === this.selectedCategory || this.selectedCategory == 'ALL') {
|
||||||
this.newThreads++
|
this.newThreads++
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,87 +1,16 @@
|
||||||
<template>
|
<template>
|
||||||
<div class='route_container' :style='posts.length ? "padding-bottom: 8.5rem;" : null'>
|
<div class='route_container' :style='posts.length ? "padding-bottom: 8.5rem;" : null'>
|
||||||
<confirm-modal v-model='showConfirmModal' @confirm='deleteThread' text='Delete' color='red'>
|
|
||||||
Are you sure you want to delete this thread?
|
|
||||||
<br>This <b>cannot</b> be undone
|
|
||||||
</confirm-modal>
|
|
||||||
|
|
||||||
<thread-post-notification
|
|
||||||
v-if='$store.state.thread.postNotification'
|
|
||||||
:post='$store.state.thread.postNotification'
|
|
||||||
@close='$store.commit("thread/setPostNotification", null)'
|
|
||||||
@goToPost='goToPostNotification'
|
|
||||||
></thread-post-notification>
|
|
||||||
|
|
||||||
<header class='thread_header'>
|
<header class='thread_header'>
|
||||||
<div class='thread_header__thread_title' ref='title'>
|
<div class='thread_header__thread_title' ref='title'>
|
||||||
{{thread}}
|
{{thread.title}}
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class='thread_side_bar'>
|
|
||||||
<loading-button
|
|
||||||
class='button--thin_text'
|
|
||||||
:class='{ "button--disabled" : !$store.state.thread.selectedPosts.length }'
|
|
||||||
:loading='false || $store.state.thread.removePostsButtonLoading'
|
|
||||||
:dark='true'
|
|
||||||
@click='removePosts'
|
|
||||||
v-if='$store.state.thread.showRemovePostsButton'
|
|
||||||
>
|
|
||||||
Remove posts ({{$store.state.thread.selectedPosts.length}})
|
|
||||||
</loading-button>
|
|
||||||
<menu-button
|
|
||||||
v-if='$store.state.admin'
|
|
||||||
:options='[
|
|
||||||
{ event: "lock_thread", value: $store.state.thread.locked ? "Unlock thread" : "Lock thread" },
|
|
||||||
{ event: "delete_thread", value: "Delete thread" },
|
|
||||||
{ event: "remove_posts", value: "Post selection remover" }
|
|
||||||
]'
|
|
||||||
@lock_thread='setThreadLockedState'
|
|
||||||
@remove_posts='setThreadSelectState'
|
|
||||||
@delete_thread='showConfirmModal = true'
|
|
||||||
>
|
|
||||||
<button class='button button--thin_text'>
|
|
||||||
<font-awesome-icon :icon='["fa", "cog"]' style='margin-right: 0.25rem;' />
|
|
||||||
Manage thread
|
|
||||||
</button>
|
|
||||||
</menu-button>
|
|
||||||
<button
|
|
||||||
class='button button--thin_text'
|
|
||||||
@click='replyThread'
|
|
||||||
v-if='!$store.state.thread.locked'
|
|
||||||
>
|
|
||||||
{{replyThreadButton}}
|
|
||||||
</button>
|
|
||||||
<post-scrubber
|
|
||||||
:posts='$store.state.thread.totalPostsCount'
|
|
||||||
:value='$route.params.post_number || 0'
|
|
||||||
@input='goToPost'
|
|
||||||
></post-scrubber>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<input-editor
|
|
||||||
v-model='editor'
|
|
||||||
|
|
||||||
:show='editorState'
|
|
||||||
:replyUsername='replyUsername'
|
|
||||||
:loading='$store.state.thread.editor.loading'
|
|
||||||
|
|
||||||
v-on:mentions='setMentions'
|
|
||||||
v-on:close='hideEditor'
|
|
||||||
v-on:submit='addPost'
|
|
||||||
>
|
|
||||||
</input-editor>
|
|
||||||
|
|
||||||
<div class='locked_thread' v-if='$store.state.thread.locked'>
|
<div class='locked_thread' v-if='$store.state.thread.locked'>
|
||||||
<h2>Thread locked</h2>
|
<h2>Thread locked</h2>
|
||||||
You can't post in this thread because it has been locked by an administrator
|
You can't post in this thread because it has been locked by an administrator
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<thread-poll
|
|
||||||
v-if='$store.state.thread.PollQuestionId'
|
|
||||||
:id='$store.state.thread.PollQuestionId'
|
|
||||||
></thread-poll>
|
|
||||||
|
|
||||||
<div class='posts box'>
|
<div class='posts box'>
|
||||||
<scroll-load
|
<scroll-load
|
||||||
@loadNext='loadNextPosts'
|
@loadNext='loadNextPosts'
|
||||||
|
@ -102,6 +31,14 @@
|
||||||
>
|
>
|
||||||
</thread-post-placeholder>
|
</thread-post-placeholder>
|
||||||
</template>
|
</template>
|
||||||
|
<thread-cubash-impl
|
||||||
|
:show-reply='!$store.state.thread.locked'
|
||||||
|
:showSelect='$store.state.thread.showRemovePostsButton'
|
||||||
|
:highlight='highlightedPostIndex === index'
|
||||||
|
:allowQuote='true'
|
||||||
|
|
||||||
|
ref='posts'
|
||||||
|
></thread-cubash-impl>
|
||||||
<thread-post
|
<thread-post
|
||||||
v-for='(post, index) in posts'
|
v-for='(post, index) in posts'
|
||||||
:key='"thread-post-" + post.id'
|
:key='"thread-post-" + post.id'
|
||||||
|
@ -128,12 +65,6 @@
|
||||||
</template>
|
</template>
|
||||||
</scroll-load>
|
</scroll-load>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<more-threads
|
|
||||||
:category='$store.state.thread.category'
|
|
||||||
:threadId='$store.state.thread.threadId'
|
|
||||||
v-if='$store.state.thread.category'
|
|
||||||
></more-threads>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -148,8 +79,7 @@
|
||||||
import LoadingButton from '../LoadingButton'
|
import LoadingButton from '../LoadingButton'
|
||||||
import ThreadPoll from '../ThreadPoll'
|
import ThreadPoll from '../ThreadPoll'
|
||||||
import ConfirmModal from '../ConfirmModal'
|
import ConfirmModal from '../ConfirmModal'
|
||||||
import MoreThreads from '../MoreThreads'
|
import ThreadCubashImpl from "@/components/ThreadCubashImpl";
|
||||||
|
|
||||||
import logger from '../../assets/js/logger'
|
import logger from '../../assets/js/logger'
|
||||||
|
|
||||||
import throttle from 'lodash.throttle'
|
import throttle from 'lodash.throttle'
|
||||||
|
@ -157,17 +87,27 @@
|
||||||
export default {
|
export default {
|
||||||
name: 'Thread',
|
name: 'Thread',
|
||||||
components: {
|
components: {
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
InputEditor,
|
InputEditor,
|
||||||
ScrollLoad,
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
ThreadPost,
|
ScrollLoad,
|
||||||
ThreadPostNotification,
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
ThreadPostPlaceholder,
|
ThreadPost,
|
||||||
PostScrubber,
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
MenuButton,
|
ThreadPostNotification,
|
||||||
LoadingButton,
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
ThreadPoll,
|
ThreadPostPlaceholder,
|
||||||
ConfirmModal,
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
MoreThreads
|
PostScrubber,
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
|
MenuButton,
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
|
LoadingButton,
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
|
ThreadPoll,
|
||||||
|
// eslint-disable-next-line vue/no-unused-components
|
||||||
|
ConfirmModal,
|
||||||
|
ThreadCubashImpl
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
@ -178,7 +118,7 @@
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
thread () {
|
thread () {
|
||||||
return this.$store.state.thread.thread;
|
return this.$store.state.thread;
|
||||||
},
|
},
|
||||||
posts () {
|
posts () {
|
||||||
return this.$store.getters.sortedPosts;
|
return this.$store.getters.sortedPosts;
|
||||||
|
|
|
@ -193,8 +193,8 @@ const router = new VueRouter({
|
||||||
{ path: '/premium', component: Reserved },
|
{ path: '/premium', component: Reserved },
|
||||||
{ path: '/upgrade', redirect: '/premium', component: Reserved },
|
{ path: '/upgrade', redirect: '/premium', component: Reserved },
|
||||||
{ path: '/experiments', component: Reserved },
|
{ path: '/experiments', component: Reserved },
|
||||||
{ path: '/thread/:slug/:id', component: Thread },
|
{ path: '/thread/:id', component: Thread },
|
||||||
{ path: '/thread/:slug/:id/:post_number', name: 'thread-post', component: Thread },
|
{ path: '/thread/:id/:post_number', name: 'thread-post', component: Thread },
|
||||||
{ path: '/thread/new', component: ThreadNew },
|
{ path: '/thread/new', component: ThreadNew },
|
||||||
{ path: '/marketplace', component: Marketplace },
|
{ path: '/marketplace', component: Marketplace },
|
||||||
{ path: '/marketplace/create', component: MarketplaceCreate },
|
{ path: '/marketplace/create', component: MarketplaceCreate },
|
||||||
|
|
|
@ -127,7 +127,7 @@ const actions = {
|
||||||
.then(res => {
|
.then(res => {
|
||||||
|
|
||||||
commit('setThread', res.data)
|
commit('setThread', res.data)
|
||||||
dispatch('setTitle', res.data.name)
|
dispatch('setTitle', res.data.title)
|
||||||
commit('setNextURL', res.data.meta.nextURL)
|
commit('setNextURL', res.data.meta.nextURL)
|
||||||
commit('setLocked', res.data.locked)
|
commit('setLocked', res.data.locked)
|
||||||
commit('setPreviousURL', res.data.meta.previousURL)
|
commit('setPreviousURL', res.data.meta.previousURL)
|
||||||
|
@ -278,6 +278,8 @@ const mutations = {
|
||||||
},
|
},
|
||||||
setThread (state, obj) {
|
setThread (state, obj) {
|
||||||
state.thread = obj.name
|
state.thread = obj.name
|
||||||
|
state.content = obj.content
|
||||||
|
state.title = obj.title
|
||||||
state.threadId = obj.id
|
state.threadId = obj.id
|
||||||
state.PollQuestionId = obj.PollQuestionId
|
state.PollQuestionId = obj.PollQuestionId
|
||||||
state.category = obj.Category
|
state.category = obj.Category
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('bans', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
canCreatePosts: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: true
|
|
||||||
},
|
|
||||||
canCreateThreads: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: true
|
|
||||||
},
|
|
||||||
ipBanned: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
message: Sequelize.TEXT,
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('bans');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('categories', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
unique: true,
|
|
||||||
allowNull: false,
|
|
||||||
},
|
|
||||||
value: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
unique: true
|
|
||||||
},
|
|
||||||
color: Sequelize.STRING
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('categories');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,23 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('ips', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
ip: Sequelize.STRING(45)
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('ips');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,35 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('logs', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
route: Sequelize.ENUM([
|
|
||||||
'index',
|
|
||||||
'search',
|
|
||||||
'settingsAccount',
|
|
||||||
'settingsGeneral',
|
|
||||||
'thread',
|
|
||||||
'threadNew',
|
|
||||||
'userPosts',
|
|
||||||
'userThreads'
|
|
||||||
]),
|
|
||||||
ThreadId: Sequelize.INTEGER,
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
SessionUserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('logs');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('notifications', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
interacted: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
read: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
type: Sequelize.ENUM('mention', 'thread update', 'reply'),
|
|
||||||
UserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('notifications');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('pollanswers', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
answer: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
PollQuestionId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('pollanswers');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('pollquestions', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
question: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
UserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('pollquestions');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,25 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('pollvotes', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
PollAnswerId: Sequelize.INTEGER,
|
|
||||||
PollQuestionId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('pollvotes');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,25 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('postnotifications', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
PostId: Sequelize.INTEGER,
|
|
||||||
NotificationId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('postnotifications');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,36 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('posts', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
content: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
postNumber: Sequelize.INTEGER,
|
|
||||||
replyingToUsername: Sequelize.STRING,
|
|
||||||
removed: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
ThreadId: Sequelize.INTEGER,
|
|
||||||
replyId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('posts');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('reports', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
reason: {
|
|
||||||
type: Sequelize.ENUM,
|
|
||||||
values: ['spam', 'inappropriate', 'harassment']
|
|
||||||
},
|
|
||||||
|
|
||||||
FlaggedByUserId: Sequelize.INTEGER,
|
|
||||||
PostId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('reports');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('settings', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
siteName: Sequelize.STRING,
|
|
||||||
siteDesc: Sequelize.STRING
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('settings');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,39 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('threads', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
slug: Sequelize.TEXT,
|
|
||||||
postsCount: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
defaultValue: 0
|
|
||||||
},
|
|
||||||
locked: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
|
|
||||||
CategoryId: Sequelize.INTEGER,
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
PollQuestionId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('threads');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('user_post', {
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
PostId: Sequelize.INTEGER,
|
|
||||||
UserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('user_post');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('userip', {
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
IpId: Sequelize.INTEGER,
|
|
||||||
UserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('userip');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,36 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('users', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
username: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
unique: true,
|
|
||||||
},
|
|
||||||
description: Sequelize.TEXT,
|
|
||||||
color: Sequelize.TEXT,
|
|
||||||
hash: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
admin: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('users');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,23 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('admintokens', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
token: Sequelize.STRING
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('admintokens');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn('settings', 'showDescription', {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropColumn('settings', 'showDescription')
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,13 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn('users', 'picture', {
|
|
||||||
type: Sequelize.TEXT('long')
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropColumn('users', 'picture')
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('profilepictures', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
file: Sequelize.BLOB('long'),
|
|
||||||
UserId: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('profilepictures');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,13 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn('profilepictures', 'mimetype', {
|
|
||||||
type: Sequelize.STRING
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropColumn('profilepictures', 'mimetype')
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,23 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('sessions', {
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
sid: {
|
|
||||||
type: Sequelize.STRING(32),
|
|
||||||
primaryKey: true
|
|
||||||
},
|
|
||||||
expires: Sequelize.DATE,
|
|
||||||
data: Sequelize.TEXT
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('sessions');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
let cheerio = require('cheerio');
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: auth, async(queryInterface, Sequelize) => {
|
|
||||||
await queryInterface.addColumn('posts', 'plainText', {
|
|
||||||
type: Sequelize.TEXT
|
|
||||||
});
|
|
||||||
|
|
||||||
let posts = await queryInterface.sequelize.query(
|
|
||||||
'SELECT id, content FROM posts',
|
|
||||||
{ type: queryInterface.sequelize.QueryTypes.SELECT }
|
|
||||||
);
|
|
||||||
|
|
||||||
let promises = posts.map(post => {
|
|
||||||
let replacements = {
|
|
||||||
id: post.id,
|
|
||||||
text: cheerio(post.content).text()
|
|
||||||
}
|
|
||||||
|
|
||||||
return queryInterface.sequelize.query(
|
|
||||||
'UPDATE posts SET plainText = :text WHERE id = :id',
|
|
||||||
{ replacements }
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
return Promise.all(promises);
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.removeColumn('posts', 'plainText');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'bans',
|
|
||||||
'deniedWebsiteAccess',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'categories',
|
|
||||||
'locked',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'locked',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'bot',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('relationships', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
|
|
||||||
friend1: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
friend2: Sequelize.INTEGER
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('relationships');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'relationships',
|
|
||||||
'type',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
defaultValue: "pending",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'maintenance',
|
|
||||||
{
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
defaultValue: "0",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'gateway',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
defaultValue: "wss://gateway.kaverti.com",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,39 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'email',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'emailVerified',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'phone',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'phoneVerified',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.renameColumn(
|
|
||||||
'bans',
|
|
||||||
'canCreateThreads',
|
|
||||||
'ReadOnlyMode',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'bans',
|
|
||||||
'canCreatePosts',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'bans',
|
|
||||||
'deniedWebsiteAccess',
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'system',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,85 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('user_payment_methods', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
userId: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
ccType: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: "Unknown",
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
paymentMethod: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: "PayPal",
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
paymentMethodHash: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
ccHash: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
PaymentToken: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return queryInterface.createTable('user_subscriptions', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
userId: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
premium: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: "Free",
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
premiumType: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
cancelledAt: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: NULL,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
subscriptionStart: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: NULL,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
subscriptionEnd: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: NULL,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
paymentMethodID: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
default: NULL,
|
|
||||||
unique: false,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('user_subscriptions', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
userId: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
premium: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
default: "Free",
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
premiumType: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
cancelledAt: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
subscriptionStart: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
subscriptionEnd: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
paymentMethodID: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
default: false,
|
|
||||||
unique: false,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('passkey', {
|
|
||||||
code: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
primaryKey: true,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
uses: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
primaryKey: true,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
maxUses: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
primaryKey: true,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('passkey');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'hidden',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,88 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'headColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'leftArmColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'rightArmColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'bodyColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'leftLegColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'rightLegColor',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: '#ffff',
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'headColor',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'leftArmColor',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'rightArmColor',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'bodyColor',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'leftLegColor',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'rightLegColor',
|
|
||||||
),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'emailToken',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,23 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'bannerText',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'bannerEnabled',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,23 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'koins',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: "75",
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'currency2',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('unbanrequests', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
reason: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: "No reason provided.",
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('unbanrequests');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'RegistrationsDisabled',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,33 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'booster',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'categories',
|
|
||||||
'BoosterOnly',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'categories',
|
|
||||||
'AdminOnly',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,50 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('StaffApplications', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
username: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
dob: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
email: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
whyWork: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
otherForm: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
experience: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
selectedOption: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('StaffApplications', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'StaffApplications',
|
|
||||||
'suggestions',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
default: "No answer provided",
|
|
||||||
required: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,38 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('UserSettings', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
theme: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
default: 'light',
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
emailOptIn: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
default: 'true',
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
betaOptIn: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
default: 'false',
|
|
||||||
unique: false,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('UserSettings', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Reports',
|
|
||||||
'UserId',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Reports',
|
|
||||||
'type',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
default: "post"
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,22 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Users',
|
|
||||||
'passwordResetToken',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
required: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Users',
|
|
||||||
'passwordResetExpiry',
|
|
||||||
{
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
required: false,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Users',
|
|
||||||
'theme',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
default: "light",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.removeColumn('Users', 'theme');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,41 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('BlogPosts', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
name: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
slug: Sequelize.TEXT,
|
|
||||||
content: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
postNumber: Sequelize.INTEGER,
|
|
||||||
removed: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
|
|
||||||
UserId: Sequelize.INTEGER,
|
|
||||||
comments: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: true
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('BlogPosts');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Settings',
|
|
||||||
'logo',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
default: process.env.VUE_APP_CDN + "/logo.png",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Settings',
|
|
||||||
'icon',
|
|
||||||
{
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
default: "/favicon.png",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.removeColumn('Users', 'theme');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,16 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Users',
|
|
||||||
'contributor',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
default: false,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,35 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.createTable(
|
|
||||||
'userWall',
|
|
||||||
{
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
content: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
plainText: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
postNumber: Sequelize.BIGINT,
|
|
||||||
userId: Sequelize.BIGINT,
|
|
||||||
fromUserId: Sequelize.BIGINT,
|
|
||||||
replyingToUsername: Sequelize.STRING,
|
|
||||||
removed: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,10 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.renameTable(
|
|
||||||
'userWall',
|
|
||||||
'userWalls'
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,34 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'level',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: "1"
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'levelProgress',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: "25"
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'level',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'levelProgress',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,46 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'latestStableVersion',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
default: "unknown"
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'latestCanaryVersion',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
default: "unknown"
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'settings',
|
|
||||||
'latestAPIVersion',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
default: "unknown"
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'settings',
|
|
||||||
'latestStableVersion',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'settings',
|
|
||||||
'latestCanaryVersion',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'settings',
|
|
||||||
'latestAPIVersion',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,22 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'threads',
|
|
||||||
'inactive',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'threads',
|
|
||||||
'inactive',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'passwordResetOptOut',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
notNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'passwordResetEnabled',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
notNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'threads',
|
|
||||||
'inactive',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,25 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('AuditLogs', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
action: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
required: true,
|
|
||||||
defaultValue: 'Unknown Action'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('AuditLogs', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'executive',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
notNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'executive',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'userWallOptOut',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
notNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'cookieOptOut',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
notNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'userWallOptOut',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,33 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'2pk',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'2faenabled',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'2pk',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'2faenabled',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,33 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'deleteCode',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT
|
|
||||||
},
|
|
||||||
),
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'deleteEnabled',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'deleteCode',
|
|
||||||
),
|
|
||||||
queryInterface.removeColumn(
|
|
||||||
'users',
|
|
||||||
'deleteEnabled',
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,30 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('conversations', {
|
|
||||||
id: {
|
|
||||||
allowNull: false,
|
|
||||||
autoIncrement: true,
|
|
||||||
primaryKey: true,
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING
|
|
||||||
},
|
|
||||||
groupUsers: {
|
|
||||||
type: Sequelize.STRING
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('conversations');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('userconversations', {
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
ConversationId: {
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
lastRead: {
|
|
||||||
type: Sequelize.DATE,
|
|
||||||
allowNull: false,
|
|
||||||
defaultValue: new Date(0)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('user_conversation');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,37 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('messages', {
|
|
||||||
id: {
|
|
||||||
allowNull: false,
|
|
||||||
autoIncrement: true,
|
|
||||||
primaryKey: true,
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
content: {
|
|
||||||
type: Sequelize.TEXT('long'),
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
read: {
|
|
||||||
type: Sequelize.BOOLEAN
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
ConversationId: {
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('messages');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,18 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn(
|
|
||||||
'users',
|
|
||||||
'jwtOffset',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
defaultValue: 0
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
queryInterface.removeColumn('users', 'jwtOffset');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,52 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('Teams', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
username: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: true
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
unique: false,
|
|
||||||
},
|
|
||||||
teamWallOptOut: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
itemsOptOut: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
forumEnabled: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
required: true,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
description: {
|
|
||||||
type: Sequelize.TEXT
|
|
||||||
},
|
|
||||||
banned: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
banReason: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
defaultValue: "No reason provided"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('StaffApplications', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn(
|
|
||||||
'teams',
|
|
||||||
'picture',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
defaultValue: "default"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
queryInterface.removeColumn('teams', 'picture');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,18 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn(
|
|
||||||
'teams',
|
|
||||||
'approved',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
queryInterface.removeColumn('teams', 'approved');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,19 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn(
|
|
||||||
'teams',
|
|
||||||
'OwnerId',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
required: true,
|
|
||||||
defaultValue: 1
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
queryInterface.removeColumn('teams', 'OwnerId');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,26 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('TeamMembers', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
teamId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
required: true,
|
|
||||||
defaultValue: 1
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
userId: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
defaultValue: 1
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('TeamMembers', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.createTable('TeamRoles', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
teamId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
required: true,
|
|
||||||
defaultValue: 1
|
|
||||||
},
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
required: true,
|
|
||||||
defaultValue: "Members"
|
|
||||||
},
|
|
||||||
inviteUsers: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: true
|
|
||||||
},
|
|
||||||
administrator: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
changeTeamMeta: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
changeTeamRoles: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
forumAdministrator: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
moderateForumThreads: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
changeTeamPrivacy: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
submitTeamItems: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
down(queryInterface, Sequelize) {
|
|
||||||
return queryInterface.dropTable('TeamMembers', {})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.addColumn(
|
|
||||||
'teammembers',
|
|
||||||
'roles',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
defaultValue: "1"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
queryInterface.removeColumn('teammembers', 'roles');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,27 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('teamPictures', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
mimetype :{
|
|
||||||
type: Sequelize.STRING
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
file: Sequelize.BLOB('long'),
|
|
||||||
TeamId: Sequelize.BIGINT
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('profilepictures');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,35 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.createTable(
|
|
||||||
'teamWalls',
|
|
||||||
{
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
content: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
plainText: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
postNumber: Sequelize.BIGINT,
|
|
||||||
teamId: Sequelize.BIGINT,
|
|
||||||
fromUserId: Sequelize.BIGINT,
|
|
||||||
replyingToUsername: Sequelize.STRING,
|
|
||||||
removed: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'teamRoles',
|
|
||||||
'priority',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: "1"
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Teams',
|
|
||||||
'teamRoleId',
|
|
||||||
{
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: "1"
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,96 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('items', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
type: {
|
|
||||||
type: Sequelize.STRING,
|
|
||||||
defaultValue: "shirt",
|
|
||||||
default: "shirt",
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false,
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
},
|
|
||||||
sourceFile: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
},
|
|
||||||
previewFile: {
|
|
||||||
type: Sequelize.TEXT
|
|
||||||
},
|
|
||||||
limited: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: 0,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
salePrice: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
saleEnabled: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: 0,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
price: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
quantityAllowed: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: 0,
|
|
||||||
defaultValue: 0
|
|
||||||
},
|
|
||||||
offSale: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: 0,
|
|
||||||
defaultValue: 0
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return queryInterface.createTable('inventory', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
purchasePrice: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
isReselling: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: 0,
|
|
||||||
defaultValue: 0
|
|
||||||
},
|
|
||||||
isResellingPrice: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
ItemId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
boughtFrom: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('inventory');
|
|
||||||
return queryInterface.dropTable('items');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'Items',
|
|
||||||
'approved',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: 0,
|
|
||||||
defaultValue: 0
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,31 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('itemcategories', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
createdAt: Sequelize.DATE,
|
|
||||||
updatedAt: Sequelize.DATE,
|
|
||||||
|
|
||||||
name: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
unique: true,
|
|
||||||
allowNull: false,
|
|
||||||
},
|
|
||||||
value: {
|
|
||||||
type: Sequelize.STRING(191),
|
|
||||||
unique: true
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
charset: 'utf8mb4'
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('itemcategories');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'itemcategories',
|
|
||||||
'locked',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'items',
|
|
||||||
'itemcategoryid',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: false,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'items',
|
|
||||||
'description',
|
|
||||||
{
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
defaultValue: "No Marketplace item description provided",
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,47 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('inventories', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
purchasePrice: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
isReselling: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: 0,
|
|
||||||
defaultValue: 0
|
|
||||||
},
|
|
||||||
isResellingPrice: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
ItemId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
boughtFrom: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
resellType: {
|
|
||||||
type: Sequelize.INTEGER
|
|
||||||
},
|
|
||||||
auctionId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
type: Sequelize.DATE
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('inventories');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,58 +0,0 @@
|
||||||
'use strict';
|
|
||||||
module.exports = {
|
|
||||||
up: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.createTable('transactions', {
|
|
||||||
id: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
primaryKey: true,
|
|
||||||
autoIncrement: true
|
|
||||||
},
|
|
||||||
itemCategoryId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
defaultValue: 1,
|
|
||||||
default: 1,
|
|
||||||
allowNull: false
|
|
||||||
},
|
|
||||||
createdAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
updatedAt: {
|
|
||||||
allowNull: false,
|
|
||||||
type: Sequelize.DATE
|
|
||||||
},
|
|
||||||
text: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
allowNull: false,
|
|
||||||
},
|
|
||||||
UserId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
},
|
|
||||||
boughtFromId: {
|
|
||||||
type: Sequelize.TEXT,
|
|
||||||
},
|
|
||||||
limited: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
defaultValue: 0,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
priceOfPurchase: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
},
|
|
||||||
team: {
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
teamId: {
|
|
||||||
type: Sequelize.BIGINT,
|
|
||||||
default: 0
|
|
||||||
},
|
|
||||||
itemId: {
|
|
||||||
type: Sequelize.BIGINT
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
down: (queryInterface, Sequelize) => {
|
|
||||||
return queryInterface.dropTable('transactions');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'transactions',
|
|
||||||
'ipId',
|
|
||||||
{
|
|
||||||
type: Sequelize.INTEGER,
|
|
||||||
allowNull: true
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,16 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
up(queryInterface, Sequelize) {
|
|
||||||
return Promise.all([
|
|
||||||
queryInterface.addColumn(
|
|
||||||
'items',
|
|
||||||
'deleted',
|
|
||||||
{
|
|
||||||
type: Sequelize.BOOLEAN,
|
|
||||||
allowNull: false,
|
|
||||||
default: false,
|
|
||||||
defaultValue: false
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
},
|
|
||||||
};
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue