This commit is contained in:
henrydays 2019-03-08 18:26:01 +00:00
commit e55b8e0221
37 changed files with 907 additions and 32 deletions

View File

@ -51,5 +51,14 @@ namespace api.Controllers
return Ok(Locs);
}
// GET api/EventLocsVisited/e/[id]
//All locs visited by event id
[HttpGet("e/{id}")]
public async Task<IActionResult> GetEventLocsVisitedEvent(int id)
{
var Locs = await _repo.GetEventLocsVisitedEvent(id);
return Ok(Locs);
}
}
}

View File

@ -50,5 +50,61 @@ namespace api.Controllers
var Teams = await _repo.GetEventTeam(id);
return Ok(Teams);
}
// GET api/teams/e/[id]
// GET all teams for event id
[HttpGet("u/{QR}")]
public async Task<IActionResult> GetTeamsUser(String QR)
{
var Teams = await _repo.GetUserTeam(QR);
return Ok(Teams);
}
// POST api/teams/add
// create team
[HttpPost("add")]
public async Task<IActionResult> CreateTeam(TeamForAdd TeamAddDetails)
{
User tCap = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == TeamAddDetails.capQR);
List<User> memb = new List<User>();
memb.Add(tCap);
Team tAdd = new Team{EventId = TeamAddDetails.EventId, Nome = TeamAddDetails.Nome, Cap = tCap, Membros = memb, NMembros = 1, Pontos = 0};
await context.Teams.AddAsync(tAdd);
var result = context.SaveChanges();
if (result == 1)
{
return StatusCode(201);
}
return BadRequest();
}
// POST api/teams/add/member
// create team
[HttpPost("add/member")]
public async Task<IActionResult> AddTeamMember(TeamAddMember MemberToAdd)
{
User newMember = await context.Users.FirstOrDefaultAsync(u=>u.QRcode == MemberToAdd.newQR);
Team tEdit = await context.Teams.Include(t=>t.Membros).FirstOrDefaultAsync(t=>t.Id == MemberToAdd.id);
tEdit.NMembros++;
tEdit.Membros.Add(newMember);
context.Update(tEdit);
var result = context.SaveChanges();
return StatusCode(201);
}
}
}

View File

@ -23,11 +23,9 @@ namespace api.Data
return rEventLocsVisitedList;
}
public IEnumerable<EventLocVisited> GetEventLocsVisitedTeam(int id)
public Task<IEnumerable<EventLocVisited>> GetEventLocsVisitedTeam(int id)
{
var allLocs = _context.EventLocsVisited.ToList();
/*
var allLocs = _context.EventLocsVisited.ToListAsync();
allLocs.ForEach(i=>Console.Write("{0}\t", i));
Console.WriteLine("teste");
List<EventLocVisited> rList = new List<EventLocVisited>();
@ -36,8 +34,8 @@ namespace api.Data
rList.Add(allLocs[i]);
}
}
*/
return allLocs;
return allLocs;
}
}

View File

@ -9,7 +9,8 @@ namespace api.Data
{
Task<IEnumerable<EventLocVisited>> GetEventLocsVisited();
Task<IEnumerable<EventLocVisited>> GetEventLocsVisitedTeam(int id);
Task<List<EventLocVisited>> GetEventLocsVisitedTeam(int id);
Task<List<EventLocVisited>> GetEventLocsVisitedEvent(int id);
}

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using api.Models;
@ -8,7 +9,8 @@ namespace api.Data
{
Task<IEnumerable<Team>> GetTeams();
Task<Team> GetEventTeam(int id);
Task<List<Team>> GetEventTeam(int id);
Task<List<Team>> GetUserTeam(String QR);
}

View File

@ -16,16 +16,37 @@ namespace api.Data
public DataContext _context { get; }
public async Task<Team> GetEventTeam(int id)
public async Task<List<Team>> GetEventTeam(int id)
{
var rTeam = await _context.Teams.FirstOrDefaultAsync(e=>e.EventId == id);
List<Team> allTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync();
List<Team> rTeam = new List<Team>();
allTeams.ForEach(delegate(Team t){
if(t.EventId == id){
rTeam.Add(t);
}
});
return rTeam;
}
public async Task<List<Team>> GetUserTeam(String QR)
{
List<Team> allTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync();
List<Team> rTeam = new List<Team>();
allTeams.ForEach(delegate(Team t){
foreach (User u in t.Membros){
if(u.QRcode == QR){
rTeam.Add(t);
}
}
});
return rTeam;
}
public async Task<IEnumerable<Team>> GetTeams()
{
var rTeams = await _context.Teams.ToListAsync();
var rTeams = await _context.Teams.Include(a=>a.Cap).Include(a=>a.Membros).ToListAsync();
return rTeams;
}

16
api/Dtos/TeamAddMember.cs Normal file
View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using api.Models;
namespace api.Dtos
{
public class TeamAddMember
{
[Required]
public int id{get;set;} //equipa id
[Required]
public string newQR{get;set;} //novo membro
}
}

19
api/Dtos/TeamForAdd.cs Normal file
View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using api.Models;
namespace api.Dtos
{
public class TeamForAdd
{
[Required]
public int EventId{get;set;} //equipa para o evento ID
[Required]
public string Nome{get;set;} //Nome da equipa
[Required]
public string capQR{get;set;} //Capitao da equipa
}
}

View File

@ -0,0 +1,450 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using api.Data;
namespace api.Migrations
{
[DbContext(typeof(DataContext))]
[Migration("20190306210633_team_fix")]
partial class team_fix
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<int>("RoleId");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ClaimType");
b.Property<string>("ClaimValue");
b.Property<int>("UserId");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
{
b.Property<string>("LoginProvider");
b.Property<string>("ProviderKey");
b.Property<string>("ProviderDisplayName");
b.Property<int>("UserId");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
{
b.Property<int>("UserId");
b.Property<string>("LoginProvider");
b.Property<string>("Name");
b.Property<string>("Value");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens");
});
modelBuilder.Entity("api.Models.Event", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("Desc");
b.Property<string>("Nome");
b.HasKey("Id");
b.ToTable("Events");
});
modelBuilder.Entity("api.Models.EventLoc", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("Desc");
b.Property<int>("EventId");
b.Property<int?>("ImgId");
b.Property<float>("Lat");
b.Property<float>("Long");
b.Property<string>("Nome");
b.HasKey("Id");
b.HasIndex("ImgId");
b.ToTable("EventLocs");
});
modelBuilder.Entity("api.Models.EventLocVisited", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int?>("LocationId");
b.Property<int?>("TeamId");
b.Property<DateTime>("timestamp");
b.HasKey("Id");
b.HasIndex("LocationId");
b.HasIndex("TeamId");
b.ToTable("EventLocsVisited");
});
modelBuilder.Entity("api.Models.Log", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int?>("UserId");
b.Property<int?>("UserId1");
b.Property<int>("amount");
b.Property<int>("available");
b.Property<string>("logType");
b.Property<int?>("productId");
b.Property<string>("transactionId");
b.HasKey("Id");
b.HasIndex("UserId");
b.HasIndex("UserId1");
b.HasIndex("productId");
b.ToTable("Logs");
});
modelBuilder.Entity("api.Models.Photo", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<DateTime>("DateAdded");
b.Property<string>("Description");
b.Property<bool>("IsMain");
b.Property<string>("Url");
b.Property<int>("UserId");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("Photos");
});
modelBuilder.Entity("api.Models.Product", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("basePrice");
b.Property<string>("name");
b.Property<float>("revenue");
b.Property<int>("sold");
b.HasKey("Id");
b.ToTable("Products");
});
modelBuilder.Entity("api.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Name")
.HasMaxLength(256);
b.Property<string>("NormalizedName")
.HasMaxLength(256);
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasName("RoleNameIndex");
b.ToTable("AspNetRoles");
});
modelBuilder.Entity("api.Models.Team", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int?>("CapId");
b.Property<int>("EventId");
b.Property<int>("NMembros");
b.Property<string>("Nome");
b.Property<int>("Pontos");
b.HasKey("Id");
b.HasIndex("CapId");
b.ToTable("Teams");
});
modelBuilder.Entity("api.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd();
b.Property<int>("AccessFailedCount");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken();
b.Property<string>("Email")
.HasMaxLength(256);
b.Property<bool>("EmailConfirmed");
b.Property<bool>("LockoutEnabled");
b.Property<DateTimeOffset?>("LockoutEnd");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256);
b.Property<string>("NormalizedUserName")
.HasMaxLength(256);
b.Property<string>("PasswordHash");
b.Property<string>("PhoneNumber");
b.Property<bool>("PhoneNumberConfirmed");
b.Property<string>("QRcode");
b.Property<string>("SecurityStamp");
b.Property<int?>("TeamId");
b.Property<bool>("TwoFactorEnabled");
b.Property<string>("UserName")
.HasMaxLength(256);
b.Property<int>("drinks");
b.Property<int>("food");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasName("UserNameIndex");
b.HasIndex("TeamId");
b.ToTable("AspNetUsers");
});
modelBuilder.Entity("api.Models.UserRole", b =>
{
b.Property<int>("UserId");
b.Property<int>("RoleId");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles");
});
modelBuilder.Entity("api.Models.Value", b =>
{
b.Property<int>("id")
.ValueGeneratedOnAdd();
b.Property<string>("Name");
b.HasKey("id");
b.ToTable("Values");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<int>", b =>
{
b.HasOne("api.Models.Role")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<int>", b =>
{
b.HasOne("api.Models.User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<int>", b =>
{
b.HasOne("api.Models.User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<int>", b =>
{
b.HasOne("api.Models.User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("api.Models.EventLoc", b =>
{
b.HasOne("api.Models.Photo", "Img")
.WithMany()
.HasForeignKey("ImgId");
});
modelBuilder.Entity("api.Models.EventLocVisited", b =>
{
b.HasOne("api.Models.EventLoc", "Location")
.WithMany()
.HasForeignKey("LocationId");
b.HasOne("api.Models.Team", "Team")
.WithMany()
.HasForeignKey("TeamId");
});
modelBuilder.Entity("api.Models.Log", b =>
{
b.HasOne("api.Models.User")
.WithMany("logsFebrada")
.HasForeignKey("UserId");
b.HasOne("api.Models.User")
.WithMany("logsFestarola")
.HasForeignKey("UserId1");
b.HasOne("api.Models.Product", "product")
.WithMany()
.HasForeignKey("productId");
});
modelBuilder.Entity("api.Models.Photo", b =>
{
b.HasOne("api.Models.User", "User")
.WithMany("Photos")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity("api.Models.Team", b =>
{
b.HasOne("api.Models.User", "Cap")
.WithMany()
.HasForeignKey("CapId");
});
modelBuilder.Entity("api.Models.User", b =>
{
b.HasOne("api.Models.Team")
.WithMany("Membros")
.HasForeignKey("TeamId");
});
modelBuilder.Entity("api.Models.UserRole", b =>
{
b.HasOne("api.Models.Role", "Role")
.WithMany("UserRoles")
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade);
b.HasOne("api.Models.User", "User")
.WithMany("UserRoles")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade);
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,22 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace api.Migrations
{
public partial class team_fix : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "QRcode",
table: "Teams");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "QRcode",
table: "Teams",
nullable: true);
}
}
}

View File

@ -251,8 +251,6 @@ namespace api.Migrations
b.Property<int>("Pontos");
b.Property<string>("QRcode");
b.HasKey("Id");
b.HasIndex("CapId");

View File

@ -10,7 +10,7 @@ namespace api.Models
public int EventId{get;set;} //equipa para o evento ID
public string Nome{get;set;} //Nome da equipa
public User Cap{get;set;} //Capitao da equipa
public ICollection<User> Membros {get;set;} //Membros da equipa
public List<User> Membros {get;set;} //Membros da equipa
public int NMembros {get;set;} //Numero de Membros na equipa
public int Pontos {get;set;} //Postos da equipa
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
api/wwwroot/apple-touch-icon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
api/wwwroot/favicon-16x16.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

BIN
api/wwwroot/favicon-32x32.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
api/wwwroot/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
api/wwwroot/fonts/icomoon.eot Executable file

Binary file not shown.

17
api/wwwroot/fonts/icomoon.svg Executable file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="instagram" d="M941.133 960h-855.306c-47.353 0-85.827-38.474-85.827-85.827v-855.306c0-47.353 38.474-85.827 85.827-85.827h855.306c47.353 0 85.827 38.474 85.827 85.827v855.306c-2.96 47.353-41.434 85.827-85.827 85.827zM941.133 18.867h-855.306v855.306h855.306v-855.306zM517.919 143.168c-130.22 0-233.803 103.584-233.803 233.803s103.584 233.803 233.803 233.803c130.22 0 233.803-103.584 233.803-233.803s-106.543-233.803-233.803-233.803zM517.919 551.584c-97.665 0-174.613-76.948-174.613-174.613s76.948-174.613 174.613-174.613c97.665 0 174.613 76.948 174.613 174.613s-79.908 174.613-174.613 174.613zM799.075 652.208c-41.434 0-73.988 32.555-73.988 71.029 0 41.434 32.555 73.988 73.988 73.988 38.474 0 73.988-32.555 73.988-73.988 0-38.474-32.555-71.029-73.988-71.029z" />
<glyph unicode="&#xe901;" glyph-name="facebook" d="M941.133 960h-855.306c-47.353 0-85.827-38.474-85.827-85.827v-855.306c0-47.353 38.474-85.827 85.827-85.827h855.306c47.353 0 85.827 38.474 85.827 85.827v855.306c-2.96 47.353-41.434 85.827-85.827 85.827zM941.133 18.867h-855.306v855.306h855.306v-855.306zM662.936 539.746c-11.838-8.879-17.757-26.636-17.757-44.393v-44.393h121.341v-103.584h-121.341v-390.659h-145.017v390.659h-68.069v103.584h68.069v50.312c0 38.474 8.879 68.069 26.636 94.705s38.474 47.353 68.069 59.191c29.595 14.798 59.191 20.717 94.705 20.717 32.555 0 68.069-5.919 100.624-20.717l-20.717-115.422c-8.879 2.96-20.717 5.919-29.595 8.879-11.838 2.96-20.717 2.96-29.595 2.96-20.717 2.96-35.514-2.96-47.353-11.838z" />
<glyph unicode="&#xe902;" glyph-name="email" horiz-adv-x="1308" d="M1198.613 960h-1089.11c-59.191 0-109.503-38.474-109.503-85.827v-855.306c0-47.353 50.312-85.827 109.503-85.827h1089.11c59.191 0 109.503 38.474 109.503 85.827v855.306c0 47.353-50.312 85.827-109.503 85.827zM1198.613 18.867h-1089.11v855.306h1089.11v-855.306zM654.058 347.376c-68.069 0-384.74 316.671-565.272 506.081l41.434 41.434c219.006-227.884 473.526-473.526 523.838-488.324 53.272 14.798 304.832 257.48 523.838 488.324l44.393-41.434c-145.017-150.936-488.324-506.081-568.231-506.081z" />
<glyph unicode="&#xe903;" glyph-name="menu" horiz-adv-x="1334" d="M1333.882 802.576l-1331.399-315.344-2.483 157.424 1331.399 315.344zM1333.882 520.504l-1331.399-314.848-2.483 157.424 1331.399 314.848zM1333.882 251.344l-1331.399-315.344-2.483 157.424 1331.399 315.344z" />
<glyph unicode="&#xe904;" glyph-name="linkedin" horiz-adv-x="1027" d="M941.133 960h-855.306c-47.353 0-85.827-38.474-85.827-85.827v-855.306c0-47.353 38.474-85.827 85.827-85.827h855.306c47.353 0 85.827 38.474 85.827 85.827v855.306c0 47.353-38.474 85.827-85.827 85.827zM941.133 18.867h-855.306v855.306h855.306v-855.306zM248.601 548.624c-8.879 8.879-14.798 20.717-14.798 35.514s5.919 26.636 14.798 35.514c8.879 8.879 20.717 14.798 38.474 14.798s26.636-5.919 38.474-14.798c8.879-8.879 14.798-20.717 14.798-35.514s-5.919-26.636-14.798-38.474c-8.879-8.879-23.676-14.798-38.474-14.798-17.757 2.96-29.595 8.879-38.474 17.757zM242.682 474.636h82.867v-361.064h-82.867v361.064zM751.723 439.121c26.636-26.636 41.434-65.11 41.434-118.382v-207.168h-82.867v195.329c0 32.555-8.879 56.231-23.676 71.029s-35.514 23.676-65.11 23.676c-29.595 0-56.231-8.879-73.988-26.636s-26.636-44.393-26.636-79.908v-183.491h-82.867v361.064h79.908v-47.353c14.798 17.757 32.555 29.595 53.272 38.474s44.393 11.838 71.029 11.838c44.393 0 82.867-11.838 109.503-38.474z" />
<glyph unicode="&#xe905;" glyph-name="plus" d="M992 576h-352v352c0 17.664-14.304 32-32 32h-192c-17.696 0-32-14.336-32-32v-352h-352c-17.696 0-32-14.336-32-32v-192c0-17.696 14.304-32 32-32h352v-352c0-17.696 14.304-32 32-32h192c17.696 0 32 14.304 32 32v352h352c17.696 0 32 14.304 32 32v192c0 17.664-14.304 32-32 32z" />
<glyph unicode="&#xe906;" glyph-name="less" d="M32 576h960c17.696 0 32-14.336 32-32v-192c0-17.696-14.304-32-32-32h-960c-17.664 0-32 14.304-32 32v192c0 17.664 14.336 32 32 32z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
api/wwwroot/fonts/icomoon.ttf Executable file

Binary file not shown.

BIN
api/wwwroot/fonts/icomoon.woff Executable file

Binary file not shown.

237
api/wwwroot/index.html Executable file
View File

@ -0,0 +1,237 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
<meta content="width" name="MobileOptimized">
<meta content="true" name="HandheldFriendly">
<!-- Place favicon.ico in the root directory -->
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000000">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="theme-color" content="#ff0000">
<title>ENEI'19</title>
<meta name="description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.">
<meta property="og:locale" content="pt_PT" />
<meta property="og:title" content="ENEI'19" />
<meta property="og:description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial." />
<meta property="og:site_name" content="ENEI'19" />
<meta property="og:url" content="http://www.enei.pt/" />
<meta property="og:image" content="http://www.enei.pt/imgs/share-image.jpg" />
<meta property="og:type" content="Website" />
<link rel="canonical" href="http://www.enei.pt/" />
<link href="bootstrap-grid.css" rel="stylesheet" type="text/css" />
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Bai+Jamjuree:400,600,700" rel="stylesheet">
</head>
<body>
<header id="main-menu">
<nav>
<a href="#" title="Abrir menu" rel="nofollow" id="open-menu-mobile">Menu</a>
<ul>
<li><a href="#enei" title="Enei">Enei</a></li>
<li class="unavailable">Oradores</li>
<li class="unavailable">Programa</li>
<li><a href="#precos" title="Preços">Preços</a></li>
<li class="unavailable">App</li>
<li class="unavailable">Patrocinadores</li>
<li><a href="#faqs" title="Faq's">Faq's</a></li>
</ul>
</nav>
</header>
<!-- apresentation section -->
<div id="apresentation">
<img src="imgs/logo-enei.png" alt="Logótipo ENEI" width="221" height="333" class="logo-enei">
</div>
<!-- enei section -->
<section id="enei">
<div class="container">
<div class="col-lg-7 col-sm-7">
<div class="pre-h1">12 A 15 ABRIL DE 2019</div>
<h1>ENEI</h1>
<hr>
<p>O Encontro Nacional de Estudantes de Informática é um dos maiores eventos na área da tecnologia em
Portugal
reunindo estudantes de informática de todas as faculdades do país.</p>
<p>Reconhecido pela sua qualidade e variedade de temas e atividades, tem como prioridade o contacto
entre
participantes e empresas, bem como a socialização, o convívio e a troca de experiências e
conhecimentos
entre os presentes.</p>
</div>
</div>
</section>
<!-- count down section -->
<aside id="countdown">
<div>
<span class="days"></span>
<div class="smalltext">Dias</div>
</div>
<div>
<span class="hours"></span>
<div class="smalltext">Horas</div>
</div>
<div>
<span class="minutes"></span>
<div class="smalltext">Minutos</div>
</div>
<div>
<span class="seconds"></span>
<div class="smalltext">Segundos</div>
</div>
</aside>
<!-- precos section -->
<section id="precos">
<div class="container">
<div class="col-lg-10 col-lg-offset-1 col-sm-12 col-xs-10 col-xs-offset-1">
<div class="pre-h1">ENEI'19</div>
<h1>Preços</h1>
<hr>
<div class="price-block">
<div class="type">Early-Bird</div>
<div>
<div class="individual-price">
<div class="price"><span></span>33</div>
<div class="label">Grupo</div>
<span class="options">*Alimentação e alojamento incluídos</span>
</div>
</div>
<a href="https://tickets.enei.pt/GROUP" title="Comprar" target="_blank" class="buy-button">Comprar</a>
</div>
<div class="price-block">
<div class="type">Early-Bird</div>
<div>
<div class="individual-price">
<div class="price"><span></span>30</div>
<div class="label">Individual</div>
<span class="options">*Alimentação e alojamento incluídos</span>
</div>
</div>
<a href="https://tickets.enei.pt" title="Comprar" target="_blank"class="buy-button">Comprar</a>
</div>
<div class="price-block disable">
<div class="type">Pontual</div>
<div class="individual-price">
<div class="price"><span></span>20</div>
<div class="label">Individual</div>
<span class="options">*Alimentação incluída</span>
</div>
<span class="buy-button">Brevemente</span>
</div>
</div>
</div>
</section>
<!-- Faqs -->
<section id="faqs">
<div class="container">
<div class="col-lg-5">
<div class="pre-h1">Perguntas Frequentes</div>
<h1>Faq</h1>
<hr>
</div>
<div class="col-lg-10">
<ul id="accordion">
<li>
<a href="#" title="O que é o ENEI?" rel="nofollow" class="toggle">O que é o ENEI?</a>
<div class="content-accordion">
<p>O Encontro Nacional de Estudantes de Informática (ENEI) é um evento que pretende
oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de
ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.</p>
<p> A 13ª edição do evento terá lugar no Instituto Superior de Engenharia de Coimbra (ISEC)
entre os dias 12 e 15 de abril de 2019 e a organização espera contar com 700 estudantes
que poderão participar em palestras, workshops e painéis de discussão, contando com
oradores de renome nacional e internacional.</p>
<p>Esta versão do evento também incluirá os tradicionais momentos de diversão noturnos que
muito apelam a todos os participantes das antigas edições e são uma excelente via de
networking e transferência de conhecimento!</p>
</div>
</li>
<li>
<a href="#" title="Onde me posso inscrever?" rel="nofollow" class="toggle">Onde me posso
inscrever?</a>
<div class="content-accordion">
<p>Os bilhetes estarão disponíveis a partir de XXX. Está atento às nossas redes sociais
para estares a par de tudo sobre o ENEI19!</p>
<p>Podes adquirir o teu bilhete <a href="#" title="Aqui">AQUI</a>.</p>
</div>
</li>
<li>
<a href="#" title="Quem pode participar no evento?" rel="nofollow" class="toggle">Quem pode
participar no evento?</a>
<div class="content-accordion">
<p>Podem participar no ENEI19 todos os estudantes de cursos relacionados com informática e
todos aqueles que querem aprender mais sobre os temas abordados!</p>
</div>
</li>
<li>
<a href="#" title="Tenho acesso a todas as sessões?" rel="nofollow" class="toggle">Tenho
acesso a todas as sessões?</a>
<div class="content-accordion">
<p>As palestras e workshops necessitam de inscrições e são limitadas. Aconselhamos-te a
escolher um Career Path para te facilitar a inscrição e aproveitares ao máximo. As
sessões de cocktails e de networking, assim como o Jantar Empresarial precisam, também,
de inscrição prévia. Mantém-te atento às nossas redes sociais!</p>
</div>
</li>
</ul>
<a href="#" title="Ver todas" class="btn btn-default">Ver todas</a>
</div>
</div>
</section>
<!-- social network section -->
<aside id="social-network">
<div class="container">
<div class="col-lg-8 col-lg-offset-2">
<h2>Siga-nos</h2>
<ul>
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank"
class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank"
class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank"
class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a></li>
</ul>
</div>
</div>
</aside>
<!-- footer -->
<footer>
<div class="container">
<div class="col-lg-12">
<p>© 2018 ENEI . Todos os direitos reservados</p>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src=“https://www.googletagmanager.com/gtag/js?id=UA-130588243-1“> </script> <script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag(js, new Date());
gtag(config, UA - 130588243 - 1);
</script>
</body>
</html>

9
api/wwwroot/main.css.map Executable file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="260.000000pt" height="260.000000pt" viewBox="0 0 260.000000 260.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,260.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2045 2540 c-55 -15 -221 -60 -370 -100 -148 -40 -308 -82 -355 -95
-47 -12 -148 -39 -225 -60 -325 -86 -581 -156 -602 -165 l-21 -9 0 -1045 c0
-723 4 -1046 11 -1046 6 0 87 21 181 46 94 25 178 47 186 49 8 2 83 22 165 44
83 22 184 50 225 61 41 11 143 38 225 61 83 22 159 43 170 45 11 2 133 35 270
72 l250 68 0 1043 c0 573 -2 1046 -5 1050 -3 5 -50 -4 -105 -19z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 888 B

1
api/wwwroot/selection.json Executable file

File diff suppressed because one or more lines are too long

0
website/android-chrome-256x256.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

7
website/career-path.html Executable file → Normal file
View File

@ -83,12 +83,13 @@
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src=“https://www.googletagmanager.com/gtag/js?id=UA-130588243-1“> </script> <script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag(js, new Date());
gtag('js', new Date());
gtag(config, UA - 130588243 - 1);
gtag('config', 'UA-130588243-1');
</script>
</body>

View File

@ -66,13 +66,13 @@
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src=“https://www.googletagmanager.com/gtag/js?id=UA-130588243-1“></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag(js, new Date());
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag(config, UA-130588243-1);
gtag('config', 'UA-130588243-1');
</script>
</body>

7
website/faqs.html Executable file → Normal file
View File

@ -84,12 +84,13 @@
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src=“https://www.googletagmanager.com/gtag/js?id=UA-130588243-1“> </script> <script>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag(js, new Date());
gtag('js', new Date());
gtag(config, UA - 130588243 - 1);
gtag('config', 'UA-130588243-1');
</script>
</body>

0
website/imgs/critical-sponsor.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

0
website/imgs/email.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

0
website/imgs/facebook.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

0
website/imgs/instagram.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

0
website/imgs/linkedin.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

0
website/imgs/logo-enei.ai Executable file → Normal file
View File

0
website/imgs/logo-enei.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -121,36 +121,36 @@
<h1>Preços</h1>
<hr>
<div class="price-block">
<div class="type">Early-Bird</div>
<div class="type">Normal</div>
<div>
<div class="individual-price">
<div class="price"><span></span>25</div>
<div class="label">Grupo</div>
<span class="options">*Alimentação e alojamento (pavilhão) incluídos</span>
<span class="options">*Alimentação [5€] e alojamento (pavilhão) [5€]</span>
</div>
</div>
<a href="https://tickets.enei.pt/group" title="Comprar" target="_blank"
class="buy-button">Comprar</a>
</div>
<div class="price-block">
<div class="type">Early-Bird</div>
<div class="type">Normal</div>
<div>
<div class="individual-price">
<div class="price"><span></span>30</div>
<div class="label">Individual</div>
<span class="options">*Alimentação e alojamento (pavilhão) incluídos</span>
<span class="options">*Alimentação [5€] e alojamento (pavilhão) [5€]</span>
</div>
</div>
<a href="https://tickets.enei.pt" title="Comprar" target="_blank" class="buy-button">Comprar</a>
</div>
<div class="price-block disable">
<div class="price-block">
<div class="type">Pontual</div>
<div class="individual-price">
<div class="price"><span></span>20</div>
<div class="label">Individual</div>
<span class="options">*Alimentação incluída</span>
</div>
<span class="buy-button">Brevemente</span>
<a href="#" title="Comprar" target="_blank" class="buy-button">Comprar</a>
</div>
</div>
</div>
@ -277,7 +277,6 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>