84 lines
2.0 KiB
JavaScript
84 lines
2.0 KiB
JavaScript
import orm from '../entity/orm';
|
|
import { star } from '../entity/star';
|
|
import emailService from './email-service';
|
|
import BizError from '../error/biz-error';
|
|
import { and, desc, eq, lt, sql, inArray } from 'drizzle-orm';
|
|
import email from '../entity/email';
|
|
import { isDel } from '../const/entity-const';
|
|
import attService from "./att-service";
|
|
import { t } from '../i18n/i18n'
|
|
const starService = {
|
|
|
|
async add(c, params, userId) {
|
|
const { emailId } = params;
|
|
const email = await emailService.selectById(c, emailId);
|
|
if (!email) {
|
|
throw new BizError(t('starNotExistEmail'));
|
|
}
|
|
if (!email.userId === userId) {
|
|
throw new BizError(t('starNotExistEmail'));
|
|
}
|
|
const exist = await orm(c).select().from(star).where(
|
|
and(
|
|
eq(star.userId, userId),
|
|
eq(star.emailId, emailId)))
|
|
.get()
|
|
|
|
if (exist) {
|
|
return
|
|
}
|
|
|
|
await orm(c).insert(star).values({ userId, emailId }).run();
|
|
},
|
|
|
|
async cancel(c, params, userId) {
|
|
const { emailId } = params;
|
|
await orm(c).delete(star).where(
|
|
and(
|
|
eq(star.userId, userId),
|
|
eq(star.emailId, emailId)))
|
|
.run();
|
|
},
|
|
|
|
async list(c, params, userId) {
|
|
let { emailId, size } = params;
|
|
emailId = Number(emailId);
|
|
size = Number(size);
|
|
|
|
if (!emailId) {
|
|
emailId = 9999999999;
|
|
}
|
|
|
|
const list = await orm(c).select({
|
|
isStar: sql`1`.as('isStar'),
|
|
starId: star.starId
|
|
, ...email
|
|
}).from(star)
|
|
.leftJoin(email, eq(email.emailId, star.emailId))
|
|
.where(
|
|
and(
|
|
eq(star.userId, userId),
|
|
eq(email.isDel, isDel.NORMAL),
|
|
lt(star.emailId, emailId)))
|
|
.orderBy(desc(star.emailId))
|
|
.limit(size)
|
|
.all();
|
|
|
|
const emailIds = list.map(item => item.emailId);
|
|
|
|
const attsList = await attService.selectByEmailIds(c, emailIds);
|
|
|
|
list.forEach(emailRow => {
|
|
const atts = attsList.filter(attsRow => attsRow.emailId === emailRow.emailId);
|
|
emailRow.attList = atts;
|
|
});
|
|
|
|
return { list };
|
|
},
|
|
async removeByEmailIds(c, emailIds) {
|
|
await orm(c).delete(star).where(inArray(star.emailId, emailIds)).run();
|
|
}
|
|
};
|
|
|
|
export default starService;
|