관리자 페이지
관리자 추가
- 상품 페이지를 만들면서 오로지 관리자만이 상품을 등록할 수 있게 만들어야 한다
- 하나의 필드를 추가하여 0일 땐 일반유저, 1일 땐 관리자로 설정할 수 있지만 고객과 관리자의 데이터는 많이 다르므로 분리해야한다(예를들어 고객은 구매횟수나 구매금액이 필요하지만 관리자는 필요 없다)
- 유저, 관리자의 기능을 정리하여 필요한 데이터를 뽑아낸다
고객 | 쇼핑몰 관리자 | |
---|---|---|
정의 | 상품을 구매하는 고객을 의미한다 | 쇼핑몰 운영자를 의미한다(개발자 x) QA와 테스터와도 구분된다 |
기능1 | 상품 조회 | 상품 조회 |
기능2 | 상품 구매 및 장바구니 | 상품 관리 |
기능3 | 상품 결제 | 고객 관리 |
기능4 | - | 주문 조회 및 관리 |
기능5 | - | 게시판 관리 |
- 표를 바탕으로 유저와 관리자의 데이터를 정의한다
- 너무 기능이 많으므로 장바구니, 결제 기능은 제외, 관리자도 주문, 게시판 기능은 제외하고 정의
- 유저는 총 구매 금액 , 한달 구매 금액 , 구매 등급 , 가입일 , 마지막 구매일
- 관리는 상품 보기/관리 권한, 고객 보기/관리 권한
-
정리된 데이터를 바탕으로 테이블을 정의한다
- 고객 테이블(Customer)
필드명 | 데이터형 | 설명 |
---|---|---|
user_seq | bigint | 유저 id |
total_price | bigint | 총 구매 금액 |
total_month_price | bigint | 이번달 구매 금액 |
price_grade | tinyint | 구매 등급 |
join_date | timestamp | 가입일 |
last_buy_date | timestamp | 마지막 구매일 |
- 관리자 테이블(Admin)
필드명 | 데이터형 | 설명 |
---|---|---|
user_seq | bigint | 유저 id |
product_view_author | tinyint(1) | 상품 조회 권한 |
product_update_author | tinyint(1) | 상품 관리 권한 |
customer_view_author | tinyint(1) | 고객 조회 권한 |
customer_update_author | tinyint(1) | 고객 관리 권한 |
- 데이터를 바탕으로 테이블 생성 쿼리를 작성한다
- 고객 테이블
CREATE TABLE `customer` (
`user_seq` bigint NOT NULL,
`total_price` bigint DEFAULT 0,
`total_month_price` bigint DEFAULT 0,
`price_grade` tinyint DEFAULT 0,
`join_date` timestamp NULL DEFAULT NOW(),
`last_buy_date` timestamp,
PRIMARY KEY (`user_seq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 관리자 테이블
CREATE TABLE `admin`(
`user_seq` bigint NOT NULL,
`product_view_author` tinyint(1) DEFAULT 0,
`product_update_author` tinyint(1) DEFAULT 0,
`customer_view_author` tinyint(1) DEFAULT 0,
`customer_update_author` tinyint(1) DEFAULT 0,
PRIMARY KEY (`user_seq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 일반 고객과 관리자를 구분짓는 플래그를 user에 추가한다
ALTER TABLE USER ADD ADMIN TINYINT(1) DEFAULT 0;
- 관리자로 만들 유저는 ADMIN 필드 값을 1로 준다
- ADMIN에 해당 유저 정보를 추가한다
- 유저의 정보를 가져오는 쿼리에 admin 필드를 가져오도록 한다
INSERT INTO admin(user_seq, product_view_author, product_update_author, customer_view_author, customer_update_author) VALUES(12, 1, 1, 1, 1);
페이지 정의
- 관리자의 기능을 바탕으로 페이지를 정의 한다
- 페이지는 2개. 상품 보기,관리 페이지, 회원 보기, 관리 페이지
- 상품은 조회, 추가, 삭제, 수정 기능이 기본적으로 들어가야 한다(페이징, 검색은 나중에)
- 회원은 조회, 추가, 수정 기능이 기본적으로 들어간다(페이징, 검색은 나중에)
- 아래와 같은 url을 정의 한다(이전에 정의했지만 재정의 해야한다. 관리자 페이지를 따로 만들므로)
url | 설명 | Method |
---|---|---|
/admin/product/list | 상품 리스트 보기 | GET |
/admin/product/{seq} | 상품이 있는지 체크 | POST |
/admin/product/{seq} | 상품 상세 보기 | GET |
/admin/product/post | 작성할 수 있는 권한이 있는지 체크 | POST |
/admin/product/post | 새로운 상품 등록 페이지 이동 | GET |
/admin/product/post | 새로운 상품 등록 | POST |
/admin/product/post/{seq} | 작성할 수 있는 권한이 있는지 체크 | GET |
/admin/product/post/{seq} | 기존에 있는 상품 페이지 이동 | POST |
/admin/product/post/{seq} | 기존에 있는 상품 수정 | PUT |
/admin/product/delete | 상품 삭제 | GET |
url | 설명 | Method |
---|---|---|
/admin/user/list | 고객 조회 | GET |
/admin/user/{seq} | 고객이 있는지 체크 | POST |
/admin/user/{seq} | 고객 상세 보기 | GET |
/admin/user/post | 고객 추가 체크 | POST |
/admin/user/post | 고객 추가 이동 | GET |
/admin/user/post | 고객 추가 | PUT |
/admin/user/post/{seq} | 고객 정보 수정 체크 | POST |
/admin/user/post/{seq} | 고객 정보 수정 페이지 이동 | GET |
/admin/user/post/{seq} | 고객 정보 수정 | PUT |
/admin/user/delete | 고객 정보 삭제 | GET |
고객, 관리자 VO, Service, DAO, xml 생성
- 고객. 관리자 페이지의 고객 정보와 관련 있다.
- Service, DAO, xml 파일도 생성한다
import java.util.Date;
import lombok.Data;
@Data
public class CustomerVO{
private Long userSeq;
private Long totalPrice;
private Long totalMonthPrice;
private Byte priceGrade;
private Date joinDate;
private Date lastBuyDate;
}
- 관리자. 관리자의 권한과 관련 있다
import lombok.Data;
@Data
public class AdminVO{
private Long userSeq;
private boolean productViewAuthor;
private boolean productUpdateAuthor;
private boolean customerViewAuthor;
private boolean customerUpdateAuthor;
}
관리자 화면 추가
- 일반 고객과 관리자가 보는 화면이 다르다.
- userVO객체의 admin 값이 true일 때 관리자 메뉴가 보이도록 수정한다
<c:choose>
<c:when test="${true eq userVO.admin}">
<div class="col-md-3 col-xs-3">
<a href="#">상품 관리</a>
</div>
<div class="col-md-3 col-xs-3">
<a href="#">고객 관리</a>
</div>
<div class="dropdown col-md-3 col-xs-3">주문 관리</div>
<div class="col-md-3 col-xs-3">게시판 관리</div>
</c:when>
<c:otherwise>
<div class="col-md-3 col-xs-3">
<a href="/main">메인화면</a>
</div>
<div class="col-md-3 col-xs-3">공지사항</div>
<div class="dropdown col-md-3 col-xs-3">
<div class="dropbtn">전체상품</div>
<div class="dropdown-content">
<a href="/product/list">디저트</a> <a href="/product/list">이유식</a>
</div>
</div>
<div class="col-md-3 col-xs-3">
<a href="/board/list?page=1&count=10">자유게시판</a>
</div>
</c:otherwise>
</c:choose>
상품 관리
- 상품 리스트 가져오기
- 상품 재고 필드 추가 및 VO, 쿼리 수정, 제품 pic 필드 -> img로 변경
alter table product add stock Long Default 0;
alter table product change pic img varchar(50)
- 메뉴에서 관리자 상품관리 페이지로 이동되도록 수정(관리자 상품관리, 상세페이지, 추가, 수정 페이지를 만든다)