@@ -76,28 +76,67 @@ public EventFullDto getUserEvent(Long userId, Long eventId) {
7676 return EventMapper .toEventFullDto (event , 0L , 0L );
7777 }
7878
79+ // @Override
80+ // @Transactional
81+ // public EventFullDto updateUserEvent(Long userId, Long eventId, UpdateEventUserRequest request) {
82+ // Event event = eventRepository.findById(eventId)
83+ // .orElseThrow(() -> new NotFoundException("Событие с id=" + eventId + " не найдено"));
84+ // if (!event.getInitiator().getId().equals(userId)) {
85+ // throw new NotFoundException("Событие не принадлежит пользователю");
86+ // }
87+ // if (event.getState() != EventState.PENDING && event.getState() != EventState.CANCELED) {
88+ // throw new ConflictException("Можно изменять только события в статусе PENDING или CANCELED");
89+ // }
90+ // if (request.getEventDate() != null && request.getEventDate().isBefore(LocalDateTime.now().plusHours(2))) {
91+ // throw new ConflictException("Дата события должна быть не ранее чем через 2 часа от текущего момента");
92+ // }
93+ // EventMapper.updateEventFromUserRequest(request, event);
94+ // if (request.getStateAction() != null) {
95+ // if (request.getStateAction().equals("SEND_TO_REVIEW")) {
96+ // event.setState(EventState.PENDING);
97+ // } else if (request.getStateAction().equals("CANCEL_REVIEW")) {
98+ // event.setState(EventState.CANCELED);
99+ // }
100+ // }
101+ // event = eventRepository.save(event);
102+ // return EventMapper.toEventFullDto(event, 0L, 0L);
103+ // }
104+
79105 @ Override
80106 @ Transactional
81107 public EventFullDto updateUserEvent (Long userId , Long eventId , UpdateEventUserRequest request ) {
82108 Event event = eventRepository .findById (eventId )
83109 .orElseThrow (() -> new NotFoundException ("Событие с id=" + eventId + " не найдено" ));
110+
84111 if (!event .getInitiator ().getId ().equals (userId )) {
85112 throw new NotFoundException ("Событие не принадлежит пользователю" );
86113 }
114+
87115 if (event .getState () != EventState .PENDING && event .getState () != EventState .CANCELED ) {
88116 throw new ConflictException ("Можно изменять только события в статусе PENDING или CANCELED" );
89117 }
118+
90119 if (request .getEventDate () != null && request .getEventDate ().isBefore (LocalDateTime .now ().plusHours (2 ))) {
91120 throw new ConflictException ("Дата события должна быть не ранее чем через 2 часа от текущего момента" );
92121 }
122+
93123 EventMapper .updateEventFromUserRequest (request , event );
124+
94125 if (request .getStateAction () != null ) {
95- if (request .getStateAction ().equals ("SEND_TO_REVIEW" )) {
126+ String action = request .getStateAction ();
127+ if ("SEND_TO_REVIEW" .equals (action )) {
128+ if (event .getState () != EventState .CANCELED ) {
129+ throw new ConflictException ("Отправить на повторное рассмотрение можно только отменённое событие" );
130+ }
96131 event .setState (EventState .PENDING );
97- } else if (request .getStateAction ().equals ("CANCEL_REVIEW" )) {
132+ } else if ("CANCEL_REVIEW" .equals (action )) {
133+ if (event .getState () != EventState .PENDING ) {
134+ throw new ConflictException ("Отменить можно только событие в статусе PENDING" );
135+ }
98136 event .setState (EventState .CANCELED );
99137 }
100138 }
139+
101140 event = eventRepository .save (event );
102141 return EventMapper .toEventFullDto (event , 0L , 0L );
103142 }
@@ -136,19 +175,73 @@ public List<EventFullDto> getEventsForAdmin(AdminEventSearchParams params) {
136175 }
137176
138177
178+ // @Override
179+ // @Transactional
180+ // public EventFullDto updateEventByAdmin(Long eventId, UpdateEventAdminRequest request) {
181+ // Event event = eventRepository.findById(eventId)
182+ // .orElseThrow(() -> new NotFoundException("Событие с id=" + eventId + " не найдено"));
183+ //
184+ // if (request.getStateAction() != null) {
185+ // if (request.getStateAction().equals("PUBLISH_EVENT")) {
186+ // if (event.getState() != EventState.PENDING) {
187+ // throw new ConflictException("Событие можно публиковать только в статусе PENDING");
188+ // }
189+ // if (event.getEventDate().isBefore(LocalDateTime.now().plusHours(1))) {
190+ // throw new ConflictException("Дата начала события должна быть не ранее чем за час от текущего момента");
191+ // }
192+ // event.setState(EventState.PUBLISHED);
193+ // event.setPublishedOn(LocalDateTime.now());
194+ // } else if (request.getStateAction().equals("REJECT_EVENT")) {
195+ // if (event.getState() == EventState.PUBLISHED) {
196+ // throw new ConflictException("Нельзя отклонить уже опубликованное событие");
197+ // }
198+ // event.setState(EventState.CANCELED);
199+ // }
200+ // }
201+ //
202+ // if (request.getAnnotation() != null) event.setAnnotation(request.getAnnotation());
203+ // if (request.getDescription() != null) event.setDescription(request.getDescription());
204+ // if (request.getTitle() != null) event.setTitle(request.getTitle());
205+ // if (request.getParticipantLimit() != null) event.setParticipantLimit(request.getParticipantLimit());
206+ // if (request.getPaid() != null) event.setPaid(request.getPaid());
207+ // if (request.getRequestModeration() != null) event.setRequestModeration(request.getRequestModeration());
208+ //
209+ // if (request.getEventDate() != null) {
210+ // if (request.getEventDate().isBefore(LocalDateTime.now().plusHours(2))) {
211+ // throw new ConflictException("Дата события не может быть раньше чем через 2 часа от текущего момента");
212+ // }
213+ // event.setEventDate(request.getEventDate());
214+ // }
215+ //
216+ // if (request.getCategory() != null) {
217+ // Category newCategory = categoryRepository.findById(request.getCategory())
218+ // .orElseThrow(() -> new NotFoundException("Категория с id=" + request.getCategory() + " не найдена"));
219+ // event.setCategory(newCategory);
220+ // }
221+ //
222+ // if (request.getLocation() != null) event.setLocation(request.getLocation());
223+ //
224+ // event = eventRepository.save(event);
225+ // Long views = 0L;
226+ // Long confirmed = eventRepository.countConfirmedRequests(eventId);
227+ // return EventMapper.toEventFullDto(event, views, confirmed);
228+ // }
229+
139230 @ Override
140231 @ Transactional
141232 public EventFullDto updateEventByAdmin (Long eventId , UpdateEventAdminRequest request ) {
142233 Event event = eventRepository .findById (eventId )
143234 .orElseThrow (() -> new NotFoundException ("Событие с id=" + eventId + " не найдено" ));
144235
236+ // 1. Обработка изменения статуса (публикация/отклонение)
145237 if (request .getStateAction () != null ) {
146238 if (request .getStateAction ().equals ("PUBLISH_EVENT" )) {
147239 if (event .getState () != EventState .PENDING ) {
148240 throw new ConflictException ("Событие можно публиковать только в статусе PENDING" );
149241 }
242+ // Проверка: дата события должна быть не ранее чем за 1 час от текущего момента
150243 if (event .getEventDate ().isBefore (LocalDateTime .now ().plusHours (1 ))) {
151- throw new ConflictException ("Дата начала события должна быть не ранее чем за час от текущего момента " );
244+ throw new ConflictException ("Дата начала события должна быть не ранее чем за час от даты публикации " );
152245 }
153246 event .setState (EventState .PUBLISHED );
154247 event .setPublishedOn (LocalDateTime .now ());
@@ -160,26 +253,31 @@ public EventFullDto updateEventByAdmin(Long eventId, UpdateEventAdminRequest req
160253 }
161254 }
162255
256+ // 2. Обновление остальных полей (если переданы)
163257 if (request .getAnnotation () != null ) event .setAnnotation (request .getAnnotation ());
164258 if (request .getDescription () != null ) event .setDescription (request .getDescription ());
165259 if (request .getTitle () != null ) event .setTitle (request .getTitle ());
166260 if (request .getParticipantLimit () != null ) event .setParticipantLimit (request .getParticipantLimit ());
167261 if (request .getPaid () != null ) event .setPaid (request .getPaid ());
168262 if (request .getRequestModeration () != null ) event .setRequestModeration (request .getRequestModeration ());
169263
264+ // 3. Обновление даты события (с проверкой, специфичной для администратора)
170265 if (request .getEventDate () != null ) {
171- if (request .getEventDate ().isBefore (LocalDateTime .now ().plusHours (2 ))) {
172- throw new ConflictException ("Дата события не может быть раньше чем через 2 часа от текущего момента" );
266+ // Для администратора ограничение на изменение даты – не ранее чем за 1 час от текущего момента
267+ if (request .getEventDate ().isBefore (LocalDateTime .now ().plusHours (1 ))) {
268+ throw new ConflictException ("Дата события не может быть раньше чем за 1 час от текущего момента" );
173269 }
174270 event .setEventDate (request .getEventDate ());
175271 }
176272
273+ // 4. Обновление категории
177274 if (request .getCategory () != null ) {
178275 Category newCategory = categoryRepository .findById (request .getCategory ())
179276 .orElseThrow (() -> new NotFoundException ("Категория с id=" + request .getCategory () + " не найдена" ));
180277 event .setCategory (newCategory );
181278 }
182279
280+ // 5. Обновление локации
183281 if (request .getLocation () != null ) event .setLocation (request .getLocation ());
184282
185283 event = eventRepository .save (event );
0 commit comments