- Added Blog and BlogPost models with necessary fields and relationships. - Created blogRouter for handling blog-related API endpoints including CRUD operations. - Developed BlogService for business logic related to blogs and posts, including sharing functionality. - Implemented API client methods for frontend to interact with blog-related endpoints. - Added internationalization support for blog-related text in English and German. - Created Vue components for blog editing, listing, and viewing, including a rich text editor for post content. - Enhanced user experience with form validations and dynamic visibility settings based on user input.
61 lines
1.2 KiB
JavaScript
61 lines
1.2 KiB
JavaScript
import { Model, DataTypes } from 'sequelize';
|
|
import { sequelize } from '../../utils/sequelize.js';
|
|
|
|
class Blog extends Model {}
|
|
|
|
Blog.init({
|
|
userId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
field: 'user_id'
|
|
},
|
|
title: {
|
|
type: DataTypes.STRING(255),
|
|
allowNull: false,
|
|
},
|
|
description: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
},
|
|
// 'public' or 'logged_in'
|
|
visibility: {
|
|
type: DataTypes.STRING(20),
|
|
allowNull: false,
|
|
defaultValue: 'public',
|
|
},
|
|
ageMin: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'age_min'
|
|
},
|
|
ageMax: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
field: 'age_max'
|
|
},
|
|
// 'm' | 'f' | null; comma-separated for future-proofing (e.g., 'm,f')
|
|
genders: {
|
|
type: DataTypes.STRING(10),
|
|
allowNull: true,
|
|
},
|
|
createdAt: {
|
|
type: DataTypes.DATE,
|
|
defaultValue: DataTypes.NOW,
|
|
field: 'created_at'
|
|
},
|
|
updatedAt: {
|
|
type: DataTypes.DATE,
|
|
defaultValue: DataTypes.NOW,
|
|
field: 'updated_at'
|
|
}
|
|
}, {
|
|
sequelize,
|
|
modelName: 'Blog',
|
|
tableName: 'blog',
|
|
schema: 'community',
|
|
timestamps: true,
|
|
underscored: true,
|
|
});
|
|
|
|
export default Blog;
|