예제 #1
0
        public async Task <RentViewModel> GetFilteredItemAsync(RentQueryRequest request)
        {
            var queryArgs = new DynamicParameters();

            var query = $@"SELECT 
                            r.Id,
                            r.StartDate,
	                        r.EndDate,
                            r.ReturnedDate,
                            r.IsActive,
                            c.Id AS Client_Id,
	                        c.FirstName AS Client_FirstName,
	                        c.LastName AS Client_LastName,
	                        c.Cpf AS Client_Cpf,
                            c.Email AS Client_Email,
                            c.IsActive AS Client_IsActive,
                            g.Id AS Games_Id,
                            g.Name AS Games_Name,
                            g.IsActive AS Games_IsActive
                           FROM [Rent] r
                            INNER JOIN Client c ON c.Id = r.ClientId
                            INNER JOIN GameRent gr ON gr.RentId = r.Id
                            INNER JOIN Game g ON g.Id = gr.GameId
                           {FormatQueryFilter(request, ref queryArgs)}
                           ORDER BY r.StartDate";

            return(GetResult(await _sqlConnection.QueryAsync <dynamic>(query, queryArgs)).FirstOrDefault());
        }
예제 #2
0
        private static string FormatQueryFilter(RentQueryRequest request, ref DynamicParameters queryArgs)
        {
            var filter = string.Empty;

            if (request.Id != null)
            {
                queryArgs.Add("Id", request.Id);

                filter += filter.Length > 0
                    ? "AND r.Id = @Id "
                    : "WHERE r.Id = @Id ";
            }

            if (request.ClientId != null)
            {
                queryArgs.Add("Id", request.ClientId);

                filter += filter.Length > 0
                    ? "AND c.Id = @Id "
                    : "WHERE c.Id = @Id ";
            }

            if (request.IsActive.HasValue)
            {
                if (request.IsActive.Value is true)
                {
                    queryArgs.Add("IsActive", request.IsActive.Value);

                    filter += filter.Length > 0
                        ? "AND r.IsActive = @IsActive AND r.ReturnedDate IS NOT NULL "
                        : "WHERE r.IsActive = @IsActive AND r.ReturnedDate IS NOT NULL";
                }
                else
                {
                    queryArgs.Add("IsActive", request.IsActive.Value);

                    filter += filter.Length > 0
                        ? "AND r.IsActive = @IsActive "
                        : "WHERE r.IsActive = @IsActive";
                }
            }

            return(filter);
        }