using Attribute;
using Model;
using Service;

namespace Services
{
    /// <summary>
    /// 用户岗位
    /// </summary>
    [AppService(ServiceType = typeof(ISysUserPostService), ServiceLifetime = LifeTime.Transient)]
    public class SysUserPostService : BaseService<SysUserPost>, ISysUserPostService
    {
        /// <summary>
        /// 新增用户岗位信息
        /// </summary>
        /// <param name="user"></param>
        public void InsertUserPost(SysUser user)
        {
            // 新增用户与岗位管理
            List<SysUserPost> list = new();
            foreach (var item in user.PostIds)
            {
                list.Add(new SysUserPost() { PostId = item, UserId = user.userId });
            }
            InsertRange(list);
        }

        /// <summary>
        /// 查询用户岗位集合
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public List<long> GetUserPostsByUserId(long userId)
        {
            var list = GetList(f => f.UserId == userId);
            return list.Select(x => x.PostId).ToList();
        }

        /// <summary>
        /// 获取用户岗位
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public string GetPostsStrByUserId(long userId)
        {
            var list = SelectPostsByUserId(userId);
            return string.Join(',', list.Select(x => x.postName));
        }

        public bool Delete(long userId)
        {
            return Delete(x => x.UserId == userId);
        }

        /// <summary>
        /// 获取用户岗位
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public List<SysPost> SelectPostsByUserId(long userId)
        {
            return Context.Queryable<SysPost, SysUserPost>((p, up) => new JoinQueryInfos(
                JoinType.Left, up.PostId == p.postId
                )).Where((p, up) => up.UserId == userId)
                .Select<SysPost>().ToList();
        }
    }
}