Click here to Skip to main content
15,887,485 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Recently in an interview I was asked to design a "send invitation for an appointment to multiple contacts in a company". (Something similar to creating an Appointment in Outlook)

Here is what I came up with, I would really appreciate some feedback, suggestions, questions.

So, after asking few questions, the interviewer wanted me to figure out how would I save the Calendar data of everyone from different timezones in my company. The invitation would have just 2 things, time and contacts…

example:

From: me@myCompany.com To: brad@myCompany.com; star@myCompany.com, angel@myCompany.com Time: 3:30 to 4:30 (CST) Date: 08/20/2015

I recommended that we save all employees data in different locations. So the DB servers will be at a location near you, which would make your calendar loading faster. There will be a centralized server which will store the machine ID against your employee id.

Ex:

Table Name: Machine_Mapping

| Employee_ID | Machine_ID |

| 101 | 1

| 102 | 2

| 103 | 2

| 104 | 1

| 105 | 3

Data on a particular machine: Table Name: Calendar_Data

| Employee_ID | Email_ID | From | TO | Date

| 101 | brad@myCompany.com | 14:00 | 14:30 | 01/01/2014

| 101 | brad@myCompany.com | 14:00 | 14:30 | 01/01/2015

| 101 | brad@myCompany.com | 15:00 | 16:00 | 08/20/2015
( This should be a conflict as the requested timing overlaps with this )

| 102 | star@myCompany.com | 17:00 | 17:30 | 08/20/2015

| 103 | angel@myCompany.com | 15:00 | 16:00 | 08/24/2015

| 104 | me@myCompany.com | 15:00 | 16:00 | 08/24/2015

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/01/2015 .... ( This is something like a daily Scrum

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/02/2015 .... meeting invite. Will this be repeated?

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/03/2015 .... or there should be some way to store

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/04/2015 .... it efficiently ? Please suggest. )

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/05/2015

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/06/2015

| 104 | me@myCompany.com | 11:00 | 11:30 | 07/07/2015

….

I was also asked to implement sendInvite method… Here is my implementation:
Java
public Result sendInvite(List<Contact> contacts, Date date, Timestamp from,
        Timestamp to) {

    List<Contact> contactsHavingConflict = new ArrayList<Contact>();
    Result result = new Result();
    try {
        for (Contact c : contacts) {
            if (!checkAvailability(c, from, to)) {    // This method will first compare the date of invitation with the dates of each contact in database. 
                contactsHavingConflict.add(c);
            }

            if (contactsHavingConflict.size() == 0) {
                sendInvite(contacts);
                result.setInvitationSent(true);
            } else {
                result.setContactsHavingConflict(contactsHavingConflict);
                result.setInvitationSent(false);
            }
        }
    } catch (Exception e) {
        // log.error(e.getMessage());
        result.setError(e.getMessage());
        result.setInvitationSent(false);
    }
    return result;
}

private boolean checkAvailability(Contact c, Timestamp from, Timestamp to) {
    int count = 0;
    // count = select count(*) from Calendar_Data where c.getEmail =
    // Email_ID and (from >= From or to <=TO);

    if (count > 0)
        return false;
    else
        return true;
}
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900