Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Troplo | bd757e214b | |
Troplo | 2d3e27197b |
|
@ -992,7 +992,7 @@ export default {
|
|||
experimentsTemp: {"wall":false,"theme":"light","relationships":false,"teams":false,"marketplace":false, "newsettings": true},
|
||||
loadingLogout: false,
|
||||
showMenu: false,
|
||||
connModal: true,
|
||||
connModal: false,
|
||||
settingsModal: false,
|
||||
showConfirmModal: false,
|
||||
ajaxErrorHandler: AjaxErrorHandler(this.$store)
|
||||
|
|
|
@ -6,9 +6,7 @@
|
|||
<template v-if='userData'>
|
||||
<div class='avatar_icon__header'>
|
||||
<figure class="picture_circle">
|
||||
<img
|
||||
:src = pictureURL
|
||||
>
|
||||
T
|
||||
</figure>
|
||||
<div class='avatar_icon__header_info'>
|
||||
<span class='avatar_icon__username' @click.stop='goToUser'>
|
||||
|
@ -32,9 +30,7 @@
|
|||
"avatar_icon__icon--tiny": size === "tiny"
|
||||
}'
|
||||
@click.stop="goToUser">
|
||||
<img
|
||||
:src = pictureURL
|
||||
>
|
||||
T
|
||||
</figure>
|
||||
</info-tooltip>
|
||||
</template>
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
<template slot='menu'>
|
||||
<div
|
||||
class='menu_button__option'
|
||||
:class='{"button": option.value === value}'
|
||||
:key='"menu-button-option-" + option.value + "-" + $index'
|
||||
:class='{"button": option.name === "test"}'
|
||||
:key='"menu-button-option-" + option.name + "-" + $index'
|
||||
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)' }"
|
||||
>
|
||||
{{option.name}}
|
||||
|
|
|
@ -0,0 +1,350 @@
|
|||
<template>
|
||||
<div
|
||||
class='post'
|
||||
>
|
||||
|
||||
|
||||
<div class='post__meta_data'>
|
||||
<div style='display: inline-flex;'>
|
||||
<avatar-icon :user='$store.state.thread.username' class='post__avatar'></avatar-icon>
|
||||
<div class='post__thread' v-if='showThread'>
|
||||
</div>
|
||||
<div class='post__user' v-else>
|
||||
{{$store.state.thread.username.username}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
tabindex='-1'
|
||||
class='post__content'
|
||||
v-html='$store.state.thread.content'
|
||||
></div>
|
||||
<div class='post__footer'>
|
||||
<div
|
||||
class='post__footer_group'
|
||||
>
|
||||
|
||||
</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,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
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 class='thread_display__header'>
|
||||
<span class='thread_display__name'>
|
||||
{{thread.name}}
|
||||
{{thread.title}}
|
||||
</span>
|
||||
<div class='thread_display__meta_bar'>
|
||||
<div>
|
||||
|
@ -31,13 +31,12 @@
|
|||
>
|
||||
<font-awesome-icon :icon='["fa", "reply"]' fixed-width />
|
||||
<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>
|
||||
</div>
|
||||
<span title='Replies to thread' v-if="thread.Posts[0]">
|
||||
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
||||
{{thread.postsCount - 1}}
|
||||
{{thread.replies}}
|
||||
</span>
|
||||
<span title='Replies to thread' v-else>
|
||||
<font-awesome-icon :icon='["far", "comment"]' fixed-width />
|
||||
|
@ -45,7 +44,7 @@
|
|||
</span>
|
||||
</div>
|
||||
<div class='thread_display__content'>
|
||||
{{threadContent.content | stripTags | truncate(150)}}
|
||||
{{threadContent | stripTags | truncate(150)}}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
@ -68,15 +67,9 @@
|
|||
return '[deleted]'
|
||||
}
|
||||
},
|
||||
replyUsername () {
|
||||
if(this.thread.Posts[1].User) {
|
||||
return this.thread.Posts[1].User.username
|
||||
} else {
|
||||
return '[deleted]'}
|
||||
},
|
||||
threadContent() {
|
||||
if(this.thread.Posts[0]) {
|
||||
return this.thread.Posts[0]
|
||||
if(this.thread.content) {
|
||||
return this.thread.content
|
||||
} else {
|
||||
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: {
|
||||
goToUser () {
|
||||
this.$router.push('/user/' + this.thread.User.username)
|
||||
this.$router.push('/u/' + this.thread.User.username)
|
||||
},
|
||||
goToThread () {
|
||||
this.$router.push('/thread/' + this.thread.slug + '/' + this.thread.id)
|
||||
this.$router.push('/thread/' + this.thread.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,34 +43,7 @@
|
|||
</div>
|
||||
<div class='post__user' v-else>
|
||||
{{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>
|
||||
|
||||
<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 class='post__date'>{{post.createdAt | formatDate('time|date', ', ')}}</div>
|
||||
</div>
|
||||
|
@ -93,27 +66,6 @@
|
|||
</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 class='post__replies'>
|
||||
</div>
|
||||
|
@ -121,9 +73,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import HeartButton from './HeartButton'
|
||||
import ModalWindow from './ModalWindow'
|
||||
import ReplyingTo from './ReplyingTo'
|
||||
import AvatarIcon from './AvatarIcon'
|
||||
import ReportPostModal from './ReportPostModal'
|
||||
|
||||
|
@ -140,9 +90,7 @@
|
|||
],
|
||||
components: {
|
||||
ModalWindow,
|
||||
ReplyingTo,
|
||||
AvatarIcon,
|
||||
HeartButton,
|
||||
ReportPostModal
|
||||
},
|
||||
data () {
|
||||
|
@ -202,13 +150,12 @@
|
|||
this.showReportPostModal = val
|
||||
},
|
||||
goToThread () {
|
||||
this.$router.push(`/thread/${this.post.Thread.slug}/${this.post.Thread.id}`)
|
||||
this.$router.push(`/thread/${this.post.Thread.id}`)
|
||||
},
|
||||
goToPost () {
|
||||
if(this.clickForPost) {
|
||||
this.$router.push(
|
||||
'/thread/' +
|
||||
this.post.Thread.slug + '/' +
|
||||
this.post.Thread.id + '/' +
|
||||
this.post.postNumber
|
||||
)
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
:key='"category-link-" + $index'
|
||||
|
||||
class='threads_main__side_bar__menu_item'
|
||||
:class='{"threads_main__side_bar__menu_item--selected": category.value === selectedCategory}'
|
||||
:to='"/category/" + category.value'
|
||||
:class='{"threads_main__side_bar__menu_item--selected": category.name === selectedCategory}'
|
||||
:to='"/category/" + category.name'
|
||||
>
|
||||
<span
|
||||
class='threads_main__side_bar__menu_item__border'
|
||||
|
@ -34,7 +34,7 @@
|
|||
<span
|
||||
class='threads_main__side_bar__menu_item__text'
|
||||
:style='{
|
||||
"color": category.value === selectedCategory ? category.color : undefined
|
||||
"color": category.name === selectedCategory ? category.color : undefined
|
||||
}'
|
||||
>{{category.name}}</span>
|
||||
</router-link>
|
||||
|
@ -83,7 +83,6 @@
|
|||
<scroll-load
|
||||
key='threads'
|
||||
class='threads_main__threads'
|
||||
v-else-if='filteredThreads.length'
|
||||
:loading='loading'
|
||||
@loadNext='getThreads'
|
||||
>
|
||||
|
@ -95,7 +94,7 @@
|
|||
Load {{newThreads}} new {{newThreads | pluralize('thread')}}
|
||||
</div>
|
||||
<thread-display
|
||||
v-for='thread in filteredThreads'
|
||||
v-for='thread in threads'
|
||||
:thread='thread'
|
||||
:key='"thread-display-" + thread.id'
|
||||
></thread-display>
|
||||
|
@ -104,11 +103,6 @@
|
|||
</thread-display-placeholder>
|
||||
</template>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -136,9 +130,9 @@
|
|||
return {offset: 0,
|
||||
users: [],
|
||||
filterOptions: [
|
||||
{name: 'New', value: 'NEW'},
|
||||
{name: 'Most active', value: 'MOST_ACTIVE'},
|
||||
{name: 'No replies', value: 'NO_REPLIES'}
|
||||
{name: 'New'},
|
||||
{name: 'Most active'},
|
||||
{name: 'No replies'}
|
||||
],
|
||||
selectedFilterOption: 'NEW',
|
||||
|
||||
|
@ -156,13 +150,13 @@
|
|||
var categories = {};
|
||||
var filter = this.selectedFilterOption
|
||||
this.$store.state.meta.categories.forEach(category => {
|
||||
categories[category.value] = category.name;
|
||||
categories[category.name] = category.name;
|
||||
});
|
||||
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 => {
|
||||
var _thread = Object.assign({}, thread);
|
||||
_thread.category = categories[thread.Category.value];
|
||||
_thread.category = categories[thread.Category.name];
|
||||
return _thread;
|
||||
}).sort((a, b) => {
|
||||
if(filter === 'NEW') {
|
||||
|
@ -170,10 +164,10 @@
|
|||
let bDate = new Date(b.Posts[0].createdAt)
|
||||
return bDate - aDate;
|
||||
} else if(filter === 'MOST_ACTIVE') {
|
||||
return b.postsCount - a.postsCount;
|
||||
return b.replies - a.replies;
|
||||
}
|
||||
}).filter(thread => {
|
||||
if(filter === 'NO_REPLIES' && thread.postsCount-1) {
|
||||
if(filter === 'NO_REPLIES' && thread.replies) {
|
||||
return false
|
||||
} else {
|
||||
return true;
|
||||
|
@ -185,7 +179,7 @@
|
|||
},
|
||||
selectedCategory: {
|
||||
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.commit('setSelectedCategory', val)
|
||||
|
@ -303,7 +297,7 @@
|
|||
|
||||
this.$socket.emit('join', 'index')
|
||||
this.$socket.on('new thread', data => {
|
||||
if(data.value === this.selectedCategory || this.selectedCategory == 'ALL') {
|
||||
if(data.name === this.selectedCategory || this.selectedCategory == 'ALL') {
|
||||
this.newThreads++
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,98 +1,29 @@
|
|||
<template>
|
||||
<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'>
|
||||
<div class='thread_header__thread_title' ref='title'>
|
||||
{{thread}}
|
||||
{{thread.title}}
|
||||
</div>
|
||||
</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'>
|
||||
<h2>Thread locked</h2>
|
||||
You can't post in this thread because it has been locked by an administrator
|
||||
</div>
|
||||
|
||||
<thread-poll
|
||||
v-if='$store.state.thread.PollQuestionId'
|
||||
:id='$store.state.thread.PollQuestionId'
|
||||
></thread-poll>
|
||||
|
||||
<div class='posts box'>
|
||||
<scroll-load
|
||||
@loadNext='loadNextPosts'
|
||||
@loadPrevious='loadPreviousPosts'
|
||||
>
|
||||
<template v-if='!posts.length'>
|
||||
<thread-post-placeholder
|
||||
v-for='n in 3'
|
||||
:key='"thread-post-placeholder-loading-" + n'
|
||||
:class='{"post--last": n === 2}'
|
||||
></thread-post-placeholder>
|
||||
<thread-cubash-impl
|
||||
:show-reply='!$store.state.thread.locked'
|
||||
:showSelect='$store.state.thread.showRemovePostsButton'
|
||||
:allowQuote='true'
|
||||
|
||||
ref='posts'
|
||||
></thread-cubash-impl>
|
||||
</template>
|
||||
|
||||
<template v-if='$store.state.thread.loadingPosts === "previous"'>
|
||||
|
@ -128,12 +59,6 @@
|
|||
</template>
|
||||
</scroll-load>
|
||||
</div>
|
||||
|
||||
<more-threads
|
||||
:category='$store.state.thread.category'
|
||||
:threadId='$store.state.thread.threadId'
|
||||
v-if='$store.state.thread.category'
|
||||
></more-threads>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -148,8 +73,7 @@
|
|||
import LoadingButton from '../LoadingButton'
|
||||
import ThreadPoll from '../ThreadPoll'
|
||||
import ConfirmModal from '../ConfirmModal'
|
||||
import MoreThreads from '../MoreThreads'
|
||||
|
||||
import ThreadCubashImpl from "@/components/ThreadCubashImpl";
|
||||
import logger from '../../assets/js/logger'
|
||||
|
||||
import throttle from 'lodash.throttle'
|
||||
|
@ -157,17 +81,27 @@
|
|||
export default {
|
||||
name: 'Thread',
|
||||
components: {
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
InputEditor,
|
||||
ScrollLoad,
|
||||
ThreadPost,
|
||||
ThreadPostNotification,
|
||||
ThreadPostPlaceholder,
|
||||
PostScrubber,
|
||||
MenuButton,
|
||||
LoadingButton,
|
||||
ThreadPoll,
|
||||
ConfirmModal,
|
||||
MoreThreads
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ScrollLoad,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ThreadPost,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ThreadPostNotification,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
ThreadPostPlaceholder,
|
||||
// eslint-disable-next-line vue/no-unused-components
|
||||
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 () {
|
||||
return {
|
||||
|
@ -178,7 +112,7 @@
|
|||
},
|
||||
computed: {
|
||||
thread () {
|
||||
return this.$store.state.thread.thread;
|
||||
return this.$store.state.thread;
|
||||
},
|
||||
posts () {
|
||||
return this.$store.getters.sortedPosts;
|
||||
|
|
|
@ -193,8 +193,8 @@ const router = new VueRouter({
|
|||
{ path: '/premium', component: Reserved },
|
||||
{ path: '/upgrade', redirect: '/premium', component: Reserved },
|
||||
{ path: '/experiments', component: Reserved },
|
||||
{ path: '/thread/:slug/:id', component: Thread },
|
||||
{ path: '/thread/:slug/:id/:post_number', name: 'thread-post', component: Thread },
|
||||
{ path: '/thread/:id', component: Thread },
|
||||
{ path: '/thread/:id/:post_number', name: 'thread-post', component: Thread },
|
||||
{ path: '/thread/new', component: ThreadNew },
|
||||
{ path: '/marketplace', component: Marketplace },
|
||||
{ path: '/marketplace/create', component: MarketplaceCreate },
|
||||
|
|
|
@ -127,7 +127,7 @@ const actions = {
|
|||
.then(res => {
|
||||
|
||||
commit('setThread', res.data)
|
||||
dispatch('setTitle', res.data.name)
|
||||
dispatch('setTitle', res.data.title)
|
||||
commit('setNextURL', res.data.meta.nextURL)
|
||||
commit('setLocked', res.data.locked)
|
||||
commit('setPreviousURL', res.data.meta.previousURL)
|
||||
|
@ -278,6 +278,10 @@ const mutations = {
|
|||
},
|
||||
setThread (state, obj) {
|
||||
state.thread = obj.name
|
||||
state.content = obj.content
|
||||
state.title = obj.title
|
||||
state.username = obj.User
|
||||
state.createdAt = obj.createdAt
|
||||
state.threadId = obj.id
|
||||
state.PollQuestionId = obj.PollQuestionId
|
||||
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