You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
import type { DiscoverSliderType } from '@server/constants/discover';
|
|
import { defaultSliders } from '@server/constants/discover';
|
|
import { getRepository } from '@server/datasource';
|
|
import logger from '@server/logger';
|
|
import {
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
|
|
@Entity()
|
|
class DiscoverSlider {
|
|
public static async bootstrapSliders(): Promise<void> {
|
|
const sliderRepository = getRepository(DiscoverSlider);
|
|
|
|
for (const slider of defaultSliders) {
|
|
const existingSlider = await sliderRepository.findOne({
|
|
where: {
|
|
type: slider.type,
|
|
},
|
|
});
|
|
|
|
if (!existingSlider) {
|
|
logger.info('Creating built-in discovery slider', {
|
|
label: 'Discover Slider',
|
|
slider,
|
|
});
|
|
await sliderRepository.save(new DiscoverSlider(slider));
|
|
}
|
|
}
|
|
}
|
|
|
|
@PrimaryGeneratedColumn()
|
|
public id: number;
|
|
|
|
@Column({ type: 'int' })
|
|
public type: DiscoverSliderType;
|
|
|
|
@Column({ type: 'int' })
|
|
public order: number;
|
|
|
|
@Column({ default: false })
|
|
public isBuiltIn: boolean;
|
|
|
|
@Column({ default: true })
|
|
public enabled: boolean;
|
|
|
|
@Column({ nullable: true })
|
|
// Title is not required for built in sliders because we will
|
|
// use translations for them.
|
|
public title?: string;
|
|
|
|
@Column({ nullable: true })
|
|
public data?: string;
|
|
|
|
@CreateDateColumn()
|
|
public createdAt: Date;
|
|
|
|
@UpdateDateColumn()
|
|
public updatedAt: Date;
|
|
|
|
constructor(init?: Partial<DiscoverSlider>) {
|
|
Object.assign(this, init);
|
|
}
|
|
}
|
|
|
|
export default DiscoverSlider;
|