// Path: src/main/java/com/getui/logful/server/mongod/QueryCondition.java
// public class QueryCondition {
// 
//     private static final int DEFAULT_LIMIT = 20;
// 
//     private static final int DEFAULT_OFFSET = 0;
// 
//     private Sort.Direction order;
// 
//     private String sort;
// 
//     private int limit;
// 
//     private int offset;
// 
//     public QueryCondition(WebRequest request) {
//         String sort = request.getParameter("sort");
//         String order = request.getParameter("order");
//         String limit = request.getParameter("limit");
//         String offset = request.getParameter("offset");
// 
//         if (StringUtils.isEmpty(sort)) {
//             this.sort = "_id";
//         } else {
//             this.sort = sort;
//         }
// 
//         if (StringUtils.isEmpty(order)) {
//             this.order = Sort.Direction.ASC;
//         } else {
//             if (StringUtils.equalsIgnoreCase(order, "asc")) {
//                 this.order = Sort.Direction.ASC;
//             } else if (StringUtils.equalsIgnoreCase(order, "desc")) {
//                 this.order = Sort.Direction.DESC;
//             } else {
//                 this.order = Sort.Direction.ASC;
//             }
//         }
// 
//         if (StringUtils.isNumeric(limit)) {
//             this.limit = Integer.parseInt(limit);
//         } else {
//             this.limit = DEFAULT_LIMIT;
//         }
// 
//         if (StringUtils.isNumeric(offset)) {
//             this.offset = Integer.parseInt(offset);
//         } else {
//             this.offset = DEFAULT_OFFSET;
//         }
//     }
// 
//     public Sort.Direction getOrder() {
//         return order;
//     }
// 
//     public String getSort() {
//         return sort;
//     }
// 
//     public int getLimit() {
//         return limit;
//     }
// 
//     public int getOffset() {
//         return offset;
//     }
// }
// 
// Path: src/main/java/com/getui/logful/server/util/DateTimeUtil.java
// public class DateTimeUtil {
// 
//     public static String timeString(long timestamp) {
//         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()).format(new Date(timestamp));
//     }
// 
//     public static String dateString(long timestamp) {
//         return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(timestamp));
//     }
// 
//     public static String dateString(Date date) {
//         return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(date);
//     }
// 
//     public static String logFileNameDateString(Date date) {
//         return new SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(date);
//     }
// 
//     public static String currentTimeString() {
//         return DateTimeUtil.timeString(System.currentTimeMillis());
//     }
// 
//     public static Date dayStart(Date date) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.setTime(date);
//         calendar.set(Calendar.HOUR_OF_DAY, 0);
//         calendar.set(Calendar.MINUTE, 0);
//         calendar.set(Calendar.SECOND, 0);
//         calendar.set(Calendar.MILLISECOND, 0);
//         return calendar.getTime();
//     }
// 
//     public static Date dayEnd(Date date) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.setTime(date);
//         calendar.set(Calendar.HOUR_OF_DAY, 23);
//         calendar.set(Calendar.MINUTE, 59);
//         calendar.set(Calendar.SECOND, 59);
//         calendar.set(Calendar.MILLISECOND, 0);
//         return calendar.getTime();
//     }
// }


import com.fasterxml.jackson.databind.ObjectMapper;
import com.getui.logful.server.mongod.QueryCondition;
import com.getui.logful.server.util.DateTimeUtil;
import org.apache.commons.lang.StringUtils;
import org.pojava.datetime.DateTime;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.WebRequest;
import java.io.StringWriter;
import java.util.Date;
import java.util.List;
            short level = Short.parseShort(levelString);
            if (level != 0) {
                query.addCriteria(Criteria.where("level").is(level));
            }
        }

        query.with(new Sort(condition.getOrder(), condition.getSort()));
        query.skip(condition.getOffset()).limit(condition.getLimit());

        return query;
    }

    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public static class BadRequestException extends RuntimeException {
        public BadRequestException() {
            super();
        }

        public BadRequestException(String message) {
            super(message);
        }
    }

    public String writeListAsJson(List<?> list) {
        if (list != null) {
            try {
                StringWriter writer = new StringWriter();
                mapper.writeValue(writer, list);
                writer.close();
                return writer.toString();
// Path: src/main/java/com/getui/logful/server/mongod/QueryCondition.java
// public class QueryCondition {
// 
//     private static final int DEFAULT_LIMIT = 20;
// 
//     private static final int DEFAULT_OFFSET = 0;
// 
//     private Sort.Direction order;
// 
//     private String sort;
// 
//     private int limit;
// 
//     private int offset;
// 
//     public QueryCondition(WebRequest request) {
//         String sort = request.getParameter("sort");
//         String order = request.getParameter("order");
//         String limit = request.getParameter("limit");
//         String offset = request.getParameter("offset");
// 
//         if (StringUtils.isEmpty(sort)) {
//             this.sort = "_id";
//         } else {
//             this.sort = sort;
//         }
// 
//         if (StringUtils.isEmpty(order)) {
//             this.order = Sort.Direction.ASC;
//         } else {
//             if (StringUtils.equalsIgnoreCase(order, "asc")) {
//                 this.order = Sort.Direction.ASC;
//             } else if (StringUtils.equalsIgnoreCase(order, "desc")) {
//                 this.order = Sort.Direction.DESC;
//             } else {
//                 this.order = Sort.Direction.ASC;
//             }
//         }
// 
//         if (StringUtils.isNumeric(limit)) {
//             this.limit = Integer.parseInt(limit);
//         } else {
//             this.limit = DEFAULT_LIMIT;
//         }
// 
//         if (StringUtils.isNumeric(offset)) {
//             this.offset = Integer.parseInt(offset);
//         } else {
//             this.offset = DEFAULT_OFFSET;
//         }
//     }
// 
//     public Sort.Direction getOrder() {
//         return order;
//     }
// 
//     public String getSort() {
//         return sort;
//     }
// 
//     public int getLimit() {
//         return limit;
//     }
// 
//     public int getOffset() {
//         return offset;
//     }
// }
// 
// Path: src/main/java/com/getui/logful/server/util/DateTimeUtil.java
// public class DateTimeUtil {
// 
//     public static String timeString(long timestamp) {
//         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()).format(new Date(timestamp));
//     }
// 
//     public static String dateString(long timestamp) {
//         return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(timestamp));
//     }
// 
//     public static String dateString(Date date) {
//         return new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(date);
//     }
// 
//     public static String logFileNameDateString(Date date) {
//         return new SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(date);
//     }
// 
//     public static String currentTimeString() {
//         return DateTimeUtil.timeString(System.currentTimeMillis());
//     }
// 
//     public static Date dayStart(Date date) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.setTime(date);
//         calendar.set(Calendar.HOUR_OF_DAY, 0);
//         calendar.set(Calendar.MINUTE, 0);
//         calendar.set(Calendar.SECOND, 0);
//         calendar.set(Calendar.MILLISECOND, 0);
//         return calendar.getTime();
//     }
// 
//     public static Date dayEnd(Date date) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.setTime(date);
//         calendar.set(Calendar.HOUR_OF_DAY, 23);
//         calendar.set(Calendar.MINUTE, 59);
//         calendar.set(Calendar.SECOND, 59);
//         calendar.set(Calendar.MILLISECOND, 0);
//         return calendar.getTime();
//     }
// }


// Path: src/main/java/com/getui/logful/server/rest/BaseRestController.java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.getui.logful.server.mongod.QueryCondition;
import com.getui.logful.server.util.DateTimeUtil;
import org.apache.commons.lang.StringUtils;
import org.pojava.datetime.DateTime;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.WebRequest;
import java.io.StringWriter;
import java.util.Date;
import java.util.List;

            short level = Short.parseShort(levelString);
            if (level != 0) {
                query.addCriteria(Criteria.where("level").is(level));
            }
        }

        query.with(new Sort(condition.getOrder(), condition.getSort()));
        query.skip(condition.getOffset()).limit(condition.getLimit());

        return query;
    }

    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public static class BadRequestException extends RuntimeException {
        public BadRequestException() {
            super();
        }

        public BadRequestException(String message) {
            super(message);
        }
    }

    public String writeListAsJson(List<?> list) {
        if (list != null) {
            try {
                StringWriter writer = new StringWriter();
                mapper.writeValue(writer, list);
                writer.close();
                return writer.toString();
            } catch (Exception e) {