This commit is contained in:
Troplo 2020-11-30 02:16:19 +11:00
parent e72dc7b594
commit 2d3e27197b
188 changed files with 516 additions and 10231 deletions

View File

@ -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)

View File

@ -6,9 +6,7 @@
<template v-if='userData'>
<div class='avatar_icon__header'>
<figure class="picture_circle">
<img
:src = pictureURL
>
T
</figure>&nbsp;
<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>

View File

@ -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}}

View File

@ -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'>
&nbsp;&middot;&nbsp;
</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>

View File

@ -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 &nbsp;</span>
<span class='thread_display__username'>{{replyUsername}}</span>
&middot;
<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)
}
}
}

View File

@ -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&nbsp;<i class="fas fa-info-circle"></i></b-tag>
</b-tooltip>
&nbsp;
<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&nbsp;<i class="fas fa-info-circle"></i></b-tag>
</b-tooltip>
&nbsp;
<b-tooltip v-if='post.User.admin' class="is-danger" label="User is an official Kaverti administrator.">
<b-tag class="is-danger" rounded>ADMIN&nbsp;<i class="fas fa-info-circle"></i></b-tag>
</b-tooltip>
&nbsp;
<b-tooltip v-if='post.User.hidden' class="is-info" label="User is not discoverable in the user list.">
<b-tag rounded>HIDDEN&nbsp;<i class="fas fa-info-circle"></i></b-tag>
</b-tooltip>
&nbsp;
<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&nbsp;<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
)

View File

@ -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++
}
})

View File

@ -1,87 +1,16 @@
<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'
@ -102,6 +31,14 @@
>
</thread-post-placeholder>
</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
v-for='(post, index) in posts'
:key='"thread-post-" + post.id'
@ -128,12 +65,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 +79,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 +87,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 +118,7 @@
},
computed: {
thread () {
return this.$store.state.thread.thread;
return this.$store.state.thread;
},
posts () {
return this.$store.getters.sortedPosts;

View File

@ -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 },

View File

@ -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,8 @@ const mutations = {
},
setThread (state, obj) {
state.thread = obj.name
state.content = obj.content
state.title = obj.title
state.threadId = obj.id
state.PollQuestionId = obj.PollQuestionId
state.category = obj.Category

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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')
}
};

View File

@ -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')
}
};

View File

@ -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');
}
};

View File

@ -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')
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'bans',
'deniedWebsiteAccess',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'categories',
'locked',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'users',
'locked',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'users',
'bot',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -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');
}
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'relationships',
'type',
{
type: Sequelize.TEXT,
defaultValue: "pending",
allowNull: false
},
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'settings',
'maintenance',
{
type: Sequelize.INTEGER,
defaultValue: "0",
allowNull: false
},
),
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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',
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'users',
'system',
{
type: Sequelize.BOOLEAN,
default: false,
allowNull: false
},
)
]);
},
};

View File

@ -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,
}
})
}
}

View File

@ -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,
}
})
}
}

View File

@ -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');
}
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'users',
'hidden',
{
type: Sequelize.BOOLEAN,
default: false,
allowNull: false
},
)
]);
},
};

View File

@ -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',
),
])
}
};

View File

@ -1,14 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'users',
'emailToken',
{
type: Sequelize.STRING,
allowNull: true
},
)
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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');
}
};

View File

@ -1,14 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'settings',
'RegistrationsDisabled',
{
type: Sequelize.BOOLEAN,
default: false
},
)
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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', {})
}
}

View File

@ -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
},
),
]);
},
};

View File

@ -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', {})
}
}

View File

@ -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"
},
),
]);
},
};

View File

@ -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,
},
),
]);
},
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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
},
)
]);
},
};

View File

@ -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
},
},
)
]);
},
};

View File

@ -1,10 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.renameTable(
'userWall',
'userWalls'
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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', {})
}
}

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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',
)
]);
},
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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', {})
}
}

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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', {})
}
}

View File

@ -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', {})
}
}

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -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
},
},
)
]);
},
};

View File

@ -1,14 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'teamRoles',
'priority',
{
type: Sequelize.BIGINT,
default: "1"
},
)
]);
},
};

View File

@ -1,14 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'Teams',
'teamRoleId',
{
type: Sequelize.BIGINT,
default: "1"
},
)
]);
},
};

View File

@ -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');
}
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'Items',
'approved',
{
type: Sequelize.BOOLEAN,
default: 0,
defaultValue: 0
},
)
]);
},
};

View File

@ -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');
}
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'itemcategories',
'locked',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -1,15 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'items',
'itemcategoryid',
{
type: Sequelize.BOOLEAN,
defaultValue: false,
allowNull: true
},
),
]);
},
};

View File

@ -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
},
),
]);
},
};

View File

@ -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');
}
};

View File

@ -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');
}
};

View File

@ -1,14 +0,0 @@
module.exports = {
up(queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'transactions',
'ipId',
{
type: Sequelize.INTEGER,
allowNull: true
},
),
]);
},
};

View File

@ -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