package cn.reghao.tnb.content.app.vod.db.repository;

import cn.reghao.jutil.jdk.web.db.Page;
import cn.reghao.tnb.content.app.vod.db.mapper.PostAlbumMapper;
import cn.reghao.tnb.content.app.vod.db.mapper.PostItemMapper;
import cn.reghao.tnb.content.app.vod.model.po.PostAlbum;
import cn.reghao.tnb.content.app.vod.model.po.PostItem;
import cn.reghao.tnb.content.app.vod.model.query.AlbumQuery;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author reghao
 * @date 2024-11-05 09:02:34
 */
@Repository
public class AlbumRepository {
    private final PostAlbumMapper postAlbumMapper;
    private final PostItemMapper postItemMapper;

    public AlbumRepository(PostAlbumMapper postAlbumMapper, PostItemMapper postItemMapper) {
        this.postAlbumMapper = postAlbumMapper;
        this.postItemMapper = postItemMapper;
    }

    public void savePostAlbum(PostAlbum postAlbum) {
        postAlbumMapper.save(postAlbum);
    }

    public void savePostItem(PostItem postItem) {
        postItemMapper.save(postItem);
    }

    @Transactional(rollbackFor = Exception.class)
    public void addAlbumImage(long albumId, int itemCount, PostItem postItem) {
        postAlbumMapper.updateAlbumCount(albumId, itemCount);
        postItemMapper.save(postItem);
    }

    public void updateAlbumCover(long albumId, String coverUrl) {
        postAlbumMapper.updateAlbumCover(albumId, coverUrl);
    }

    public void deletePostItem(long albumId, String postId) {
        postItemMapper.deleteByAlbumIdAndPostId(albumId, postId);
    }

    public int countPostItem(long albumId) {
        return postItemMapper.countByAlbumId(albumId);
    }

    public List<PostItem> getPostItems(Page page, long albumId) {
        return postItemMapper.findByAlbumIdByPage(page, albumId);
    }

    public PostItem getByImagePost(String imageFileId, long loginUser) {
        return postItemMapper.findByImagePost(imageFileId, loginUser);
    }

    public int countPostAlbum(AlbumQuery albumQuery) {
        return postAlbumMapper.countByCriteria(albumQuery);
    }

    public List<PostAlbum> getPostAlbums(Page page, AlbumQuery albumQuery) {
        return postAlbumMapper.findAlbumByPage(page, albumQuery);
    }

    public PostItem getByUrl(String url) {
        return postItemMapper.findByUrl(url);
    }

    public int countImageFiles(long albumId) {
        return postItemMapper.countByAlbumId(albumId);
    }

    public List<PostItem> getImageFiles(long albumId, Page page) {
        return postItemMapper.findByAlbumIdByPage(page, albumId);
    }
}
