ItemDBImpl.java service

팡태(❁´◡`❁)·2022년 3월 7일
0

java

목록 보기
23/36
package com.example.service;

import java.util.Date;
import java.util.List;

import com.example.entity.Item;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

@Service
public class ItemDBImpl implements ItemDB {

    // 환경설정으로 생성된 객체를 가져옴
    @Autowired
    private MongoTemplate mongoDB;

    @Autowired
    private SequenceService sequence;

    @Override
    public int insertItem(Item item) {
        try {
            long seq = sequence.generatorSequence("SEQ_ITEM4_CODE");
            item.setCode(seq);
            item.setRegdate(new Date());
            Item item1 = mongoDB.insert(item);
            if (item1.getCode() == seq) {
                return 1;
            }
            return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }

    }

    @Override
    public List<Item> selectListPageSearchItem(int page, String text) {
        try {
            Query query = new Query();

            Criteria criteria = Criteria.where("name").regex(".*" + text + ".*");
            query.addCriteria(criteria);

            Pageable pageable = PageRequest.of(page - 1, 10);

            query.with(pageable);
            query.fields().exclude("filedata", "filetype", "filesize", "filename"); // projection

            Sort sort = Sort.by(Direction.DESC, "_id");
            query.with(sort);

            return mongoDB.find(query, Item.class);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public int deleteItem(Long code) {
        try {
            Query query = new Query();
            query.addCriteria(Criteria.where("_id").is(code));
            DeleteResult result = mongoDB.remove(query, Item.class);
            if (result.getDeletedCount() == 1L) {
                return 1;
            }
            return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    @Override
    public Item selectOneItem(Long code) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("_id").is(code);
            query.addCriteria(criteria);
            return mongoDB.findOne(query, Item.class);
        } catch (Exception e) {
            e.printStackTrace(); // 개발자를 위한 출력(debug용)
            return null;
        }
    }

    @Override
    public Item selectOneItemImage(Long code) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("_id").is(code);
            query.addCriteria(criteria);
            query.fields().include("filedata", "filetype", "filesize");

            return mongoDB.findOne(query, Item.class);

        } catch (Exception e) {
        }
        return null;
    }

    @Override
    public int updateItem(Item item) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("_id").is(item.getCode());
            query.addCriteria(criteria);

            Update update = new Update();
            update.set("name", item.getName());
            update.set("price", item.getPrice());
            update.set("quantity", item.getQuantity());
            if (item.getFilesize() > 0) { // 첨부되었다면
                update.set("filedata", item.getFiledata());
                update.set("filesize", item.getFilesize());
                update.set("filetype", item.getFiletype());
                update.set("filename", item.getFilename());
            }

            UpdateResult result = mongoDB.updateFirst(query, update, Item.class);
            if (result.getModifiedCount() == 1L) {
                return 1;
            }
            return 0;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    @Override
    public long selectItemCount() {
        try {
            Query query = new Query();
            return mongoDB.count(query, Item.class);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

    @Override
    public long CountSearchItem(String text) {
        try {
            Query query = new Query();
            Criteria criteria = Criteria.where("name").regex(".*" + text + ".*");
            query.addCriteria(criteria);

            return mongoDB.count(query, Item.class);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }

}

0개의 댓글