Skip to content

Commit

Permalink
Merge pull request #9 from foxstrot/master
Browse files Browse the repository at this point in the history
Исправила расчет рейтинга при повтороной отправке записи истории
  • Loading branch information
netvoxlab authored May 5, 2017
2 parents 605c4b7 + 596ffa8 commit b33e163
Show file tree
Hide file tree
Showing 23 changed files with 273 additions and 73 deletions.
31 changes: 29 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,33 @@ Content-Type →application/json;charset=UTF-8

Web API v4
---
### Загрузка трека на сервер

##### POST /v4/tracks
* `fileGuid` – UUID трека
* `filePath` - Полный локальный путь к файлу на пользовательском устройстве, включая имя файла (String)
* `deviceId` – UUID device
* `musicFile` – прикрепленный файл

##### HttpStatus
* `400, "Bad Request"` - Если пользователь ввел некорректные данные
* `201, "Created"` – если все ок
* `500, "Internal Server Error"` – если произошел сбой на сервере


### Получение трека с сервера
##### GET /v4/tracks/{trackId}
* `{trackId}` – UUID трека

##### HttpStatus
* `200, "OK"` – в теле ответа будет лежать трек
* `404, "Not Found"` – если трек с таким recid не найден


### Регистрация нового устройства
##### GET /v4/devices/{deviceId}/{deviceName}/registerdevice
* `{deviceId}` - UUID устройства
* `{deviceName}` - название устройства (может отсутсвтваовать)
* `{deviceName}` - название устройства (может отсутствовать)
##### HttpStatus
* `200, "OK"` – если все ок
* `400, "Bad Request"` - Если пользователь ввел некорректные данные
Expand All @@ -90,17 +113,21 @@ Content-Type →application/json;charset=UTF-8
"artist": "Artist",
"length": "duration",
"name": "Title",
"id": "00000000-0000-0000-0000-000000000000"
"id": "00000000-0000-0000-0000-000000000000",
"pathupload":"C:\\music\\track.mp3",
"timeexecute": "00:00:00.006238"
}

### Сохранение истории треков
##### POST /v4/histories/{deviceId}/{trackId}
* `{historyId}` - UUID записи истории в БД устройства
* `{trackId}` – UUID прослушанного трека
* `{deviceId}` – UUID устройства где был прослушан трек
* `lastListen` - Время последнего прослушивания или пропуска трека для данного пользователя ("yyyy-MM-ddTHH:mm:ss")
* `isListen` - Признак прослушан ли трек до конца: 1 - прослушан, -1 – нет (int)

##### HttpStatus
* `200, "OK"` – если все ок
* `208, "Already Reported"` - если история с таким UUID уже отдавалась
* `404, "Not found"` - если deviceId или trackid не найден
* `500, "Internal Server Error"` – если произошел сбой на сервере
11 changes: 8 additions & 3 deletions v3/src/main/java/ownradio/domain/AbstractEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

import lombok.Getter;
import lombok.Setter;
import org.hibernate.HibernateException;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.AbstractUUIDGenerator;
import org.hibernate.id.UUIDGenerationStrategy;
import org.hibernate.id.UUIDGenerator;
import ownradio.annotation.DisplayName;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

/**
Expand All @@ -25,8 +29,9 @@ public abstract class AbstractEntity implements Serializable {
@DisplayName(key = "id")
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@GenericGenerator(name = "uuid", strategy="ownradio.util.IdOrGenerate")
@Column(unique = true)
// @Column(insertable=true, updatable=true, unique=true, nullable=false)
private UUID recid;

private String recname;
Expand Down Expand Up @@ -62,4 +67,4 @@ public boolean equals(Object o) {
public int hashCode() {
return recid != null ? recid.hashCode() : 0;
}
}
}
4 changes: 4 additions & 0 deletions v3/src/main/java/ownradio/domain/History.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,8 @@ public class History extends AbstractEntity {
@ManyToOne
@JoinColumn(name = "deviceid")
private Device device;

private Integer countsend;

private String comment;
}
2 changes: 2 additions & 0 deletions v3/src/main/java/ownradio/domain/NextTrack.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.Getter;
import lombok.Setter;

import java.sql.Time;
import java.util.UUID;

/**
Expand All @@ -15,4 +16,5 @@ public class NextTrack {
private Integer methodid;
private UUID useridrecommended;
private String txtrecommendedinfo;
private String timeexecute;
}
1 change: 1 addition & 0 deletions v3/src/main/java/ownradio/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ public class User extends AbstractEntity {
public User(String name) {
setRecname(name);
}
public Integer experience;
}
6 changes: 5 additions & 1 deletion v3/src/main/java/ownradio/domain/UsersRating.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ public class UsersRating{
// @Temporal(TemporalType.TIMESTAMP)
private String recupdated;

@DateTimeFormat(pattern = "dd-MM-yyyy'T'H:m:s")
//@Temporal(TemporalType.TIMESTAMP)
private String lastactive;

private BigInteger owntracks;

private BigInteger lasttracks;
private BigInteger downloadtracks;
}
4 changes: 2 additions & 2 deletions v3/src/main/java/ownradio/repository/TrackRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public interface TrackRepository extends JpaRepository<Track, UUID> {
@Query(value = "select getnexttrackid_string(?1)", nativeQuery = true)
UUID getNextTrackId(UUID deviceId);

// @Query(value = "select * from getnexttrack_v2(?1)", nativeQuery = true)
@Query(value = "select * from getnexttrack(?1)", nativeQuery = true)
@Query(value = "select * from getnexttrack_v2(?1)", nativeQuery = true)
// @Query(value = "select * from getnexttrack(?1)", nativeQuery = true)
List<Object[]> getNextTrackV2(UUID deviceId);

@Query(value = "select registertrack(?1, ?2, ?3, ?4)", nativeQuery = true)
Expand Down
3 changes: 3 additions & 0 deletions v3/src/main/java/ownradio/repository/UserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ public interface UserRepository extends JpaRepository<User, UUID> {

@Query(value = "select * from getusersrating(?1)", nativeQuery = true)
List<Object[]> getUsersRating(Integer countRows);

@Query(value = "select * from getlastusers(?1)", nativeQuery = true)
List<Object[]> getLastUsers(Integer countRows);
}
5 changes: 4 additions & 1 deletion v3/src/main/java/ownradio/service/HistoryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import ownradio.domain.History;

import java.util.UUID;

/**
* Интерфейс сервиса, для работы с историей прослушанных треков
*
* @author Alpenov Tanat
*/
public interface HistoryService {
void save(History history);
void save(History history, Boolean isNewHistoryRec);
History getById(UUID uuid);
}
1 change: 1 addition & 0 deletions v3/src/main/java/ownradio/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ public interface UserService {

List<UsersRating> getUsersRating(Integer countRows);

List<UsersRating> getLastUsers(Integer countRows);
}
48 changes: 28 additions & 20 deletions v3/src/main/java/ownradio/service/impl/HistoryServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import ownradio.repository.RatioRepository;
import ownradio.service.HistoryService;

import java.util.UUID;

@Service
public class HistoryServiceImpl implements HistoryService {

Expand All @@ -24,31 +26,37 @@ public HistoryServiceImpl(HistoryRepository historyRepository, RatingRepository
this.ratioRepository = ratioRepository;
}

@Override
public History getById(UUID uuid) {
return historyRepository.findOne(uuid);
}

@Transactional
@Override
public void save(History history) {
public void save(History history, Boolean isNewHistoryRec) {
historyRepository.saveAndFlush(history);

Rating rating = ratingRepository.findByUserAndTrack(history.getDevice().getUser(), history.getTrack());
if(rating != null) {
int ratingsum = rating.getRatingsum() + history.getIsListen();
rating.setLastlisten(history.getLastListen());
rating.setRatingsum(ratingsum);
ratingRepository.saveAndFlush(rating);
}
else {
rating = new Rating();
rating.setUser(history.getDevice().getUser());
rating.setTrack(history.getTrack());
rating.setLastlisten(history.getLastListen());
rating.setRatingsum(history.getIsListen());
ratingRepository.saveAndFlush(rating);
}
if(isNewHistoryRec) {
Rating rating = ratingRepository.findByUserAndTrack(history.getDevice().getUser(), history.getTrack());
if (rating != null) {
int ratingsum = rating.getRatingsum() + history.getIsListen();
rating.setLastlisten(history.getLastListen());
rating.setRatingsum(ratingsum);
ratingRepository.saveAndFlush(rating);
} else {
rating = new Rating();
rating.setUser(history.getDevice().getUser());
rating.setTrack(history.getTrack());
rating.setLastlisten(history.getLastListen());
rating.setRatingsum(history.getIsListen());
ratingRepository.saveAndFlush(rating);
}

try {
ratioRepository.updateRatios(history.getDevice().getRecid());
}catch (Exception ex){
ex.printStackTrace();
try {
ratioRepository.updateRatios(history.getDevice().getRecid());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public NextTrack getNextTrackIdV2(UUID deviceId) {
nextTrack.setMethodid((Integer) objects.get(0)[1]);
if(objects.get(0)[2] != null) nextTrack.setUseridrecommended(UUID.fromString((String) objects.get(0)[2]));
if(objects.get(0)[3] != null) nextTrack.setTxtrecommendedinfo((String) objects.get(0)[3]);
if(objects.get(0)[4] != null) nextTrack.setTimeexecute((String) objects.get(0)[4]);
return nextTrack;
}else{
return null;
Expand Down
26 changes: 25 additions & 1 deletion v3/src/main/java/ownradio/service/impl/UserServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ownradio.domain.Device;
import ownradio.domain.User;
import ownradio.domain.UsersRating;
import ownradio.repository.UserRepository;
Expand Down Expand Up @@ -41,7 +42,7 @@ public List<UsersRating> getUsersRating(Integer countRows) {
userRating.setRecname((String) objects.get(i)[2]);
userRating.setRecupdated((String) objects.get(i)[3]);
userRating.setOwntracks((BigInteger) objects.get(i)[4]);
userRating.setLasttracks((BigInteger) objects.get(i)[5]);
userRating.setDownloadtracks((BigInteger) objects.get(i)[5]);

usersRating.add(userRating);
}
Expand All @@ -50,4 +51,27 @@ public List<UsersRating> getUsersRating(Integer countRows) {
}
return usersRating;
}


@Override
public List<UsersRating> getLastUsers(Integer countRows){
List<UsersRating> lastUsers = new ArrayList<UsersRating>();
List<Object[]> objects = userRepository.getLastUsers(countRows);
if (objects != null) {
for (int i = 0; i < objects.size(); i++) {
UsersRating lastUser = new UsersRating();
lastUser.setUserid(UUID.fromString((String) objects.get(i)[0]));
lastUser.setReccreated((String) objects.get(i)[1]);
lastUser.setLastactive((String) objects.get(i)[2]);
lastUser.setRecname((String) objects.get(i)[3]);
lastUser.setRecupdated((String) objects.get(i)[4]);
lastUser.setOwntracks((BigInteger) objects.get(i)[5]);
lastUser.setDownloadtracks((BigInteger) objects.get(i)[6]);
lastUsers.add(lastUser);
}
} else {
return null;
}
return lastUsers;
}
}
28 changes: 28 additions & 0 deletions v3/src/main/java/ownradio/util/IdOrGenerate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ownradio.util;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.UUIDGenerator;
import ownradio.domain.AbstractEntity;

import java.util.UUID;

/**
* Created by a.polunina on 17.04.2017.
*/

public class IdOrGenerate extends UUIDGenerator {

@Override
public UUID generate(SessionImplementor session, Object obj) throws HibernateException {
if (obj == null) throw new HibernateException(new NullPointerException());

if (((AbstractEntity) obj).getRecid() == null) {
UUID id = UUID.randomUUID(); // super.generate(session, obj);
return id;
} else {
return ((AbstractEntity) obj).getRecid();

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public ResponseEntity save(@PathVariable UUID deviceId, @PathVariable UUID track
history.setTrack(track);
history.setDevice(device);

historyService.save(history);
historyService.save(history, true);

return new ResponseEntity(history, HttpStatus.OK);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ private ResponseEntity getResponseEntity(@PathVariable UUID deviceId, @PathVaria
history.setTrack(track);
history.setDevice(device);

historyService.save(history);
historyService.save(history, true);
log.info("Save history, rating and update ratios");
return new ResponseEntity(HttpStatus.OK);
} catch (Exception e) {
Expand Down
Loading

0 comments on commit b33e163

Please sign in to comment.