-
-
Save jipengxiang/32dda180721ba5f624260ec35633668b to your computer and use it in GitHub Desktop.
(1) PLease upload your client side code to call talents API | |
(2) AWS url for web API if you have PUBLISHED your web api to AWS | |
or url to S3 image | |
(3) Sequence diagram for calling Stripe API | |
or calling global weather web service |
- AJAX Timeout Retry
$.ajax({ type: 'GET', url: url, async: false, contentType: "application/json", jsonpCallback: callback, dataType: 'jsonp', tryCount: 0, retryLimit: 3, success: function (json) { console.dir('success'); }, error: function (xhr, textStatus, errorThrown ) { if (textStatus == 'timeout') { this.tryCount++; if (this.tryCount <= this.retryLimit) { sleep(1000); $.ajax(this); return; } return; } console.log(e.message); } });
- Entity Framework (DotNet Core)
2.1 Startup - Specify services used
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<TalentDbContext>( options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped<ITalentRepository, SqlTalentRepository>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
2.2 TalentDbContext - Create DB Context
`
public class TalentDbContext : DbContext
{
public TalentDbContext(DbContextOptions options) : base(options) {}
public DbSet<Talent> Talents { get; set; }
}
`
2.3 SqlTalentRepository - DB CRUD operations
`
public class SqlTalentRepository : ITalentRepository
{
private TalentDbContext _context;
public SqlTalentRepository(TalentDbContext context)
{
_context = context;
}
public void Post(Talent inputTalent)
{
_context.Add(inputTalent);
_context.SaveChanges();
}
public IEnumerable<Talent> GetAll() => _context.Talents;
public Talent Get(int inputId) => _context.Talents.FirstOrDefault(t => t.Id == inputId);
public void Put(int inputId, Talent inputTalent)
{
Talent talent = _context.Talents.FirstOrDefault(x => x.Id == inputId);
if (talent != null)
{
_context.Talents.Remove(talent);
_context.Talents.Add(inputTalent);
}
_context.SaveChanges();
}
public void Delete(int inputId)
{
Talent talent = _context.Talents.FirstOrDefault(x => x.Id == inputId);
_context.Talents.Remove(talent);
_context.SaveChanges();
}
}
`
3. AJAX Loading
$(document).ajaxStart(function () { $("#loading").show(); }).ajaxStop(function () { $("#loading").hide(); });
Lim Wen Hui 1646348
public class TalentsController : ApiController
{
static readonly TalentRepository repository = new TalentRepository();
[EnableCors(origins: "", headers: "", methods: "*")]
// download Microsoft.AspNet.Cors package library
[Route("api/talents")]
public IEnumerable GetAllTalents()
{
return repository.GetAll();
}
[Route("api/talents/{id:int}")]
public Talent GetTalent(int id)
{
Talent item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return item;
}
}
Database Driven Approach
public class TalentController : ApiController
{
CSC_DatabaseEntitiesv1 db = new CSC_DatabaseEntitiesv1();
///
/// Get all talents objects from database
///
///
[RequireHttps]
[HttpGet]
[EnableCors(origins: "", headers: "", methods: "*")]
[Route("api/talents")]
public IEnumerable GetAllTalents()
{
List talents = db.Talents.ToList();
System.Threading.Thread.Sleep(1500);
return talents;
}
Model
Adding a Database Model
Reference
https://www.youtube.com/watch?v=UrHKfCCncHQ (Start from 2:03)