package me.pbox.site.dao.impl;
import com.google.inject.Inject;
import me.pbox.site.dao.CategoryDao;
import me.pbox.site.dao.PackageDao;
import me.pbox.site.model.Package;
import org.jacuzzi.core.DatabaseException;
import java.util.List;
/**
* @author Mike Mirzayanov (mirzayanovmr@gmail.com)
*/
public class PackageDaoImpl extends ApplicationDaoImpl<Package> implements PackageDao {
@Inject
private CategoryDao categoryDao;
@Override
public Package find(String name, String version) {
return findOnlyBy("name=? AND version=?", name, version);
}
@Override
public Package insertOrUpdate(Package p) {
Package before = find(p.getName(), p.getVersion());
if (before == null) {
p.setCreationTime(findNow());
insert(p);
} else {
p.setId(before.getId());
p.setCreationTime(before.getCreationTime());
p.setUserId(p.getUserId());
update(p);
}
return p;
}
@Override
public List<Package> findAll() {
return findBy("1 ORDER BY creationTime DESC, id DESC");
}
@Override
public void onDownload(Package p) {
categoryDao.ensureExistsByPackage(p);
if (getJacuzzi().execute("UPDATE `Package` SET `downloadCount`=`downloadCount`+1 WHERE `name`=?", p.getName()) != 1) {
throw new DatabaseException("Can't update " + p + '.');
}
categoryDao.onDownload(p);
}
}