package com.intrbiz.bergamot.ui.api;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
import com.intrbiz.balsa.engine.route.Router;
import com.intrbiz.balsa.metadata.WithDataAdapter;
import com.intrbiz.bergamot.config.model.TeamCfg;
import com.intrbiz.bergamot.data.BergamotDB;
import com.intrbiz.bergamot.metadata.IgnoreBinding;
import com.intrbiz.bergamot.metadata.IsaObjectId;
import com.intrbiz.bergamot.model.Site;
import com.intrbiz.bergamot.model.Team;
import com.intrbiz.bergamot.model.message.ContactMO;
import com.intrbiz.bergamot.model.message.TeamMO;
import com.intrbiz.bergamot.ui.BergamotApp;
import com.intrbiz.metadata.Get;
import com.intrbiz.metadata.JSON;
import com.intrbiz.metadata.ListOf;
import com.intrbiz.metadata.Prefix;
import com.intrbiz.metadata.RequireValidPrincipal;
import com.intrbiz.metadata.Var;
import com.intrbiz.metadata.XML;
@Prefix("/api/team")
@RequireValidPrincipal()
public class TeamAPIRouter extends Router<BergamotApp>
{
@Get("/")
@JSON
@WithDataAdapter(BergamotDB.class)
@ListOf(TeamMO.class)
public List<TeamMO> getTeams(BergamotDB db, @Var("site") Site site)
{
return db.listTeams(site.getId()).stream().filter((x) -> permission("read", x)).map((x) -> x.toStubMO(currentPrincipal())).collect(Collectors.toList());
}
@Get("/name/:name")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
public TeamMO getTeamByName(BergamotDB db, @Var("site") Site site, String name)
{
Team team = notNull(db.getTeamByName(site.getId(), name));
require(permission("read", team));
return team.toMO(currentPrincipal());
}
@Get("/name/:name/children")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@ListOf(TeamMO.class)
public List<TeamMO> getTeamChildrenByName(BergamotDB db, @Var("site") Site site, String name)
{
Team team = notNull(db.getTeamByName(site.getId(), name));
require(permission("read", team));
return team.getChildren().stream().filter((x) -> permission("read", x)).map((x) -> x.toMO(currentPrincipal())).collect(Collectors.toList());
}
@Get("/name/:name/contacts")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@ListOf(ContactMO.class)
public List<ContactMO> getTeamContactsByName(BergamotDB db, @Var("site") Site site, String name)
{
Team team = notNull(db.getTeamByName(site.getId(), name));
require(permission("read", team));
return team.getContacts().stream().filter((x) -> permission("read", x)).map((x) -> x.toMO(currentPrincipal())).collect(Collectors.toList());
}
@Get("/id/:id")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
public TeamMO getTeam(BergamotDB db, @IsaObjectId() UUID id)
{
Team team = notNull(db.getTeam(id));
require(permission("read", team));
return team.toMO(currentPrincipal());
}
@Get("/id/:id/children")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@ListOf(TeamMO.class)
public List<TeamMO> getTeamChildren(BergamotDB db, @IsaObjectId() UUID id)
{
Team team = notNull(db.getTeam(id));
require(permission("read", team));
return team.getChildren().stream().filter((x) -> permission("read", x)).map((x) -> x.toMO(currentPrincipal())).collect(Collectors.toList());
}
@Get("/id/:id/contacts")
@JSON(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@ListOf(ContactMO.class)
public List<ContactMO> getTeamContacts(BergamotDB db, @IsaObjectId() UUID id)
{
Team team = notNull(db.getTeam(id));
require(permission("read", team));
return team.getContacts().stream().filter((x) -> permission("read", x)).map((x) -> x.toMO(currentPrincipal())).collect(Collectors.toList());
}
@Get("/name/:name/config.xml")
@XML(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@IgnoreBinding
public TeamCfg getTeamConfigByName(BergamotDB db, @Var("site") Site site, String name)
{
Team team = notNull(db.getTeamByName(site.getId(), name));
require(permission("read.config", team));
return team.getConfiguration();
}
@Get("/id/:id/config.xml")
@XML(notFoundIfNull = true)
@WithDataAdapter(BergamotDB.class)
@IgnoreBinding
public TeamCfg getTeamConfig(BergamotDB db, @IsaObjectId() UUID id)
{
Team team = notNull(db.getTeam(id));
require(permission("read.config", team));
return team.getConfiguration();
}
}